javafx內嵌為Swing程式淺析

小小懶羊羊發表於2014-05-02
javafx 嵌入swing當中:
關鍵類:JFXPanel
主要問題正確處理javafx執行緒與Swing EDT執行緒的關係、
對於EDT需要使用SwingUtilities.invokeLater()
對於javafx scene的構建需要使用Platform.runLater()
而JFXPanel則是javafx與Swing互動的唯一途徑,JFXPanel以Scene作為頂級容器,而JFXPanel在Swing中就是一個普通的Panel。


public class Test {


    private static void initAndShowGUI() {
        // This method is invoked on the EDT thread
        JFrame frame = new JFrame("Swing and JavaFX");
        final JFXPanel fxPanel = new JFXPanel();
        frame.add(fxPanel);
        frame.setSize(300, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                initFX(fxPanel);
            }
       });
    }


    private static void initFX(JFXPanel fxPanel) {
        // This method is invoked on the JavaFX thread
        Scene scene = createScene();
        fxPanel.setScene(scene);
    }


    private static Scene createScene() {
        Group  root  =  new  Group();
        Scene  scene  =  new  Scene(root, Color.ALICEBLUE);
        Text  text  =  new  Text();
        
        text.setX(40);
        text.setY(100);
        text.setFont(new Font(25));
        text.setText("Welcome JavaFX!");


        root.getChildren().add(text);


        return (scene);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                initAndShowGUI();
            }
        });
    }
}

相關文章