日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

javafx 和swing_Swing和JavaFX:使用JFXPanel

發布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javafx 和swing_Swing和JavaFX:使用JFXPanel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javafx 和swing

我很快將不得不在基于Swing的胖客戶端中處理JavaFX –哦,對不起,我的意思是“多層富客戶端”!

因此,這使我來看看JFXPanelJFXPanel是一個javax.swing.JComponent,用于將JavaFX內容嵌入到Swing-UI中。 JFXPanel的用法類似于JPanel,并且可以通過EDT作為通用Swing組件進行訪問,除了必須通過JavaFX應用程序線程來處理JavaFX組件之外。

為了解決這些問題,我創建了兩個類似的面板(Swing + JavaFX),每個面板都有一個按鈕,一個TextField和一個Label,并將它們放置在JSplitPane和JFrame中:

仔細看里面

要嘗試Swing <-> JavaFX互操作性,按鈕操作是將文本從TextField設置為JLabel,反之亦然。
JPanel處理通用的Swing東西沒有什么特別的,但是JFXPanel包含JavaFX控件:

public class SwingFXPanel extends JFXPanel {private Button testButton;private TextField testTextField;private Label testLabel;private VBox pane;public SwingFXPanel() {init();}private void init() {testButton = new Button("I am a JavaFX Button");testTextField = new TextField();testLabel = new Label("empty");pane = new VBox();pane.setAlignment(Pos.CENTER);pane.getChildren().addAll(testTextField, testButton, testLabel);Platform.runLater(this::createScene);}private void createScene() {Scene scene = new Scene(pane);setScene(scene);}public Button getTestButton() {return testButton;}public TextField getTestTextField() {return testTextField;}public Label getTestLabel() {return testLabel;} }

這里很重要:將場景添加到JavaFX Application線程內的JFXPanel:

Platform.runLater(this::createScene);

如果您致電:

createScene()

從另一個線程,您會獲得Runtime-Exception:

java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0

同樣,每次與JavaFX相關內容的交互都必須放在JavaFX Application Thread上:

例如:

Platform.runLater(() -> {swingFXPanel.getTestLabel().setText(swingPanel.getTestTextField().getText()); });public class InteropFrame extends JFrame {private JSplitPane centralSplitPane;private SwingPanel swingPanel;private SwingFXPanel swingFXPanel;public InteropFrame(){init();}private void init() {setTitle("Swing <-> JavaFX Interoperatbiliy");setSize(500, 500);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new BorderLayout());centralSplitPane = new JSplitPane();centralSplitPane.setDividerLocation(0.5);centralSplitPane.setResizeWeight(0.3);swingPanel = new SwingPanel();swingFXPanel = new SwingFXPanel();swingPanel.getTestButton().addActionListener((ActionEvent e) -> {Platform.runLater(() -> {swingFXPanel.getTestLabel().setText(swingPanel.getTestTextField().getText());});});swingFXPanel.getTestButton().setOnAction((javafx.event.ActionEvent t) -> {swingPanel.getTestLabel().setText(swingFXPanel.getTestTextField().getText());});centralSplitPane.setLeftComponent(swingPanel);centralSplitPane.setRightComponent(swingFXPanel);add(centralSplitPane, BorderLayout.CENTER);} }

另外,處理FXML也很簡單:

public class SwingFXMLPanel extends JFXPanel {@FXMLprivate Button testButton;@FXMLprivate TextField testTextField;@FXMLprivate Label testLabel;private VBox rootPane;private URL fxmlResource;public SwingFXMLPanel(URL fxmlResource){this.fxmlResource = fxmlResource;init();}private void init(){rootPane = new VBox();FXMLLoader loader = new FXMLLoader(fxmlResource);loader.setController(this);loader.setRoot(rootPane);try {loader.load();} catch (IOException ex) {Logger.getLogger(SwingFXMLPanel.class.getName()).log(Level.SEVERE, null, ex);}testButton.setText("I am a JavaFX Button");testLabel.setText("empty");Platform.runLater(this::createScene);}private void createScene() {Scene scene = new Scene(rootPane);setScene(scene);}public Button getTestButton() {return testButton;}public TextField getTestTextField() {return testTextField;}public Label getTestLabel() {return testLabel;}}

對我來說,讓我的同事盡可能多地接受在Swing中使用JavaFX至關重要。

因此,我想簡化特定的FX應用程序線程處理。 因此,如果使用JPanel的主要區別只是添加以下內容,那么也許可以實現:

private void createScene() {Scene scene = new Scene(rootPane);setScene(scene);}

并致電:

Platform.runLater(this::createScene);

JFXPanel中

  • 您可以在此處找到完整的示例代碼。

翻譯自: https://www.javacodegeeks.com/2014/11/swing-and-javafx-working-with-jfxpanel.html

javafx 和swing

總結

以上是生活随笔為你收集整理的javafx 和swing_Swing和JavaFX:使用JFXPanel的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。