2014-12-23 2 views
0

나는이 tutorial을 읽고 성공했습니다.JavaFx embed Swing JDesktopPane에 아무것도 표시되지 않습니다.

스윙 JDesktopPane을 사용하여 내부 프레임을 JavaFX에 포함하고자합니다.

코드 :

public class FxSwingFx extends Application { 

    private static void createSwing(SwingNode swingNode) { 
     final JDesktopPane desktopPane = new JDesktopPane(); 
     swingNode.setContent(desktopPane); 
     final JInternalFrame if1 = new JInternalFrame("Hello, ", true, true, true, true); 
     final JInternalFrame if2 = new JInternalFrame(" World!", true, true, true, true); 
     if1  .setVisible(true); 
     if2  .setVisible(true); 
     desktopPane.setVisible(true); 
     desktopPane.add(if1); 
     desktopPane.add(if2); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     final SwingNode swingNode = new SwingNode(); 
     final BorderPane root = new BorderPane(swingNode); 
     root.setBottom(new Button("FX Button")); 
     SwingUtilities.invokeLater(() -> createSwing(swingNode)); 
     primaryStage.setScene(new Scene(root, 400, 300)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

결과 :

enter image description here

질문 : 왜 내부 프레임이 표시되지 않습니다?

답변

2

내부 프레임이 볼 수있는 조건 :

    크기가 setSize()로 설정해야합니다
  • , setPreferredSize()
  • setVisible(true)가 호출되어 있어야합니다 enougth되지

코드 :

public class FxSwingFx extends Application { 

    JInternalFrame createInternalFrame(String title, int width, int height) { 
     final JInternalFrame frame = new JInternalFrame(title, true, true, true, true); 
     frame.setVisible(true); 
     frame.setSize(width, height); 
     return frame; 
    } 

    void createSwing(SwingNode swingNode) { 
     final JDesktopPane desktopPane = new JDesktopPane(); 
     desktopPane.add(createInternalFrame("One", 400, 300)); 
     desktopPane.add(createInternalFrame("Two", 400, 300)); 
     swingNode.setContent(desktopPane); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     final SwingNode swingNode = new SwingNode(); 
     SwingUtilities.invokeLater(() -> createSwing(swingNode)); 
     final BorderPane root = new BorderPane(swingNode); 
     final Button jfxBtn = new Button("FX Button"); 
     root.setBottom(jfxBtn); 
     primaryStage.setScene(new Scene(root, 600, 500)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

결과 :

JavaFX8 Application with JDesktopPane

관련 문제