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

歡迎訪問 生活随笔!

生活随笔

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

java

Swing和JavaFX:使用JFXPanel

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

我很快將不得不在基于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

總結

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

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

主站蜘蛛池模板: 久久久久久国产精品三区 | 五月香蕉网| 精品三级在线 | 自拍亚洲国产 | 国产精品国产三级国产播12软件 | 日韩福利在线播放 | 最新av导航| 91福利视频在线 | 艳母动漫在线播放 | 久久午夜鲁丝片午夜精品 | 亚洲精品av在线 | 少妇高清精品毛片在线视频 | 香蕉视频在线网址 | 国产剧情久久久 | 怒海潜沙秦岭神树 | 日韩精品极品视频在线观看免费 | 久久一区二区三区视频 | av看片资源 | 天天爱天天草 | 天堂中文字幕在线观看 | 亚洲尤物在线 | 久久丫精品久久丫 | 成人性视频在线 | 欧美一区二区三区久久成人精品 | 四虎免费看黄 | 欧美大奶在线 | 91在线成人| 亚洲一区中文字幕永久在线 | 日本一级大毛片a一 | 亚洲一区二区在线电影 | 欧美片网站yy | 日本免费福利视频 | 精射女上司 | 中文字幕在线观看网址 | 亚洲在线视频免费观看 | 四虎影视免费永久大全 | 欧美黄色特级视频 | 欧日韩不卡在线视频 | 国产亚洲精品久久久久四川人 | 女教师高潮黄又色视频 | 国产精品97 | 女儿的朋友4在线观看 | 91黄色国产| 日韩在线观看av | av综合一区 | 国产第九页| 日本一区二区在线不卡 | 18禁免费无码无遮挡不卡网站 | 亚洲女同视频 | 青娱乐青青草 | 高清国产一区二区三区四区五区 | 人人精品久久 | 美女少妇直播 | 精品人妻一区二区三区免费看 | 麻豆乱淫一区二区三区 | 亚洲在线看片 | 天天插天天插 | 中文字幕一区二区三区久久久 | 亚洲综合成人亚洲 | 韩国三级在线播放 | 91亚洲视频在线观看 | 久久高潮视频 | 日本欧美国产一区二区三区 | a资源在线观看 | 欧美亚洲丝袜 | 一本色道久久综合亚洲精品图片 | 亚洲女成人图区 | 欧美综合视频在线观看 | 国产91在线视频观看 | 黄色大片aa | 噼里啪啦动漫高清在线观看 | 98久久久| 九热精品视频 | 这里只有精品在线观看 | 抱着老师的嫩臀猛然挺进视频 | 国产裸体永久免费视频网站 | 久久久九九九热 | 一女二男一黄一片 | 国产区二区 | a免费在线 | 激情总合网 | 男女无遮挡网站 | 少妇裸体性生交 | 男人天堂2020| 国产精品一区二区在线观看 | 久久久精品在线 | 视频在线观看一区二区 | 最近的中文字幕在线看视频 | 狠狠干很很操 | 日韩在线无| 亚洲av无码成人精品区 | 国产免费又黄又爽又色毛 | 黄色在线观看av | 成人18网站 | 小视频国产 | 白丝校花扒腿让我c | 亚洲福利在线观看 | 国产www在线 | 男女做爰猛烈高潮描写 |