javafx和swing巢狀使用的方法

離離原上草77發表於2019-10-15

在javafx中,要使用swing的控制元件,先要將該控制元件新增到swingNode容器中,再新增到javafx下的容器中,就可以顯示使用了,

 

public class test extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane root = new AnchorPane();

        //new一個swingNode容器
        SwingNode swingNode = new SwingNode();
        JTextArea jTextArea = new JTextArea();
        //新增Swing的textArea到容器中
        swingNode.setContent(jTextArea);
        //將swingNode新增到fx下的主容器中
        root.getChildren().add(swingNode);
        //新增到場景顯示
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

 

同樣的 ,要在swing中使用javafx的控制元件,要使用JFXPanel 作為容器中轉,

不過要注意的是,javafx的控制元件,只能在fx的執行緒下工作,所以,主啟動類要繼承Application,

package test;

import javafx.application.Application;
import javafx.embed.swing.JFXPanel;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import javax.swing.*;

public class test2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        JFrame jFrame = new JFrame();//主介面
        TextArea textArea = new TextArea();//fx下的文字域
        JFXPanel jfxPanel = new JFXPanel();//轉換容器

        Scene scene = new Scene(textArea);//fx主容器
        jfxPanel.setScene(scene);//新增場景

        jFrame.setContentPane(jfxPanel);//新增到場景顯示
        jFrame.pack();//自適應佈局大小
        jFrame.setVisible(true);//顯示介面
    }

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

 

相關文章