2014-07-11 2 views
3

JavaFX 구성 요소를 추가 할 기존 Swing 응용 프로그램이 있습니다. 내 임베디드 JFXPanel 중 하나는 Stage을 사용하여 팝업 대화 상자를 표시하고 해당 Stage은 기존 JFrame을 소유자로 모달로 표시하고 싶습니다.Swing 응용 프로그램 내의 JFXPanel에서 모달 Stage 만들기

내가 수행 한 작업의 자체 포함, 컴파일 가능한 예입니다. Stage 형식을 Modality.APPLICATION_MODAL으로 설정하고 소유자를 SceneWindow, JFXPanel 내에 설정했습니다.

Swing 응용 프로그램 내에서 Stage 모달을 어떻게 만듭니 까?

import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Modality; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 
import java.awt.BorderLayout; 
import java.awt.Dimension; 

public class App { 

    public static void main(String[] args) { 
     new App().run(); 
    } 

    public void run() { 

     JFrame applicationFrame = new JFrame("JavaFX Mucking"); 
     applicationFrame.setSize(new Dimension(300, 300)); 


     JPanel content = new JPanel(new BorderLayout()); 
     applicationFrame.setContentPane(content); 

     JFXPanel jfxPanel = new JFXPanel(); 
     content.add(jfxPanel); 

     Platform.runLater(() -> jfxPanel.setScene(this.generateScene())); 

     applicationFrame.setVisible(true); 
     applicationFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    } 

    private Scene generateScene() { 
     Button button = new Button("Show Dialog"); 
     Scene scene = new Scene(new BorderPane(button)); 

     button.setOnAction(actionEvent -> { 
      Stage stage = new Stage(StageStyle.UTILITY); 
      stage.initOwner(scene.getWindow()); 
      stage.initModality(Modality.APPLICATION_MODAL); 
      stage.setScene(new Scene(new Label("Hello World!"))); 
      stage.sizeToScene(); 
      stage.show(); 
     }); 

     return scene; 
    } 
} 

답변

1

장면 개체를 생성하여 JFrame 내부에 배치 된 JFXPanel 안에 배치했습니다. 동시에 기본 Scene 객체와 동일한 Scene을 스테이지에 배치했습니다.

동일한 장면을 동시에 두 개의 다른 장소에 배치 할 수 없습니다. Stage와 JFrame이 두 개의 서로 다른 GUI 라이브러리의 최상위 컨테이너이기 때문에 모달 대화 상자를 만들려면 Stage 객체 만 사용하십시오.

장면을 JFXPanel 및 스테이지에 추가하지 마십시오. 둘 중 하나를 수행하십시오.