Swing中嵌入Fxml方式的JavaFX

本文介绍了如何在Swing应用中嵌入JavaFX的Fxml界面,重点讲解了Stage作为FX容器的角色,Scene作为第二层容器的功能,以及通过JFXPanel实现二者的融合。JFXPanel继承自Swing组件,允许在Swing组件中展示JavaFX内容。要正确运行,JavaFX需在其自身线程中启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天抽出时间研究了下Fx的层关系

javafx.stage

Class Stage 就是整个FX容器的顶层容器用来包含所有fxUI的

而Scene则为第二层容器

所有Scene目录下的容易都可以放入Scene里进行显示(应用程序必须指定场景图的根节点通过设置根属性。如果作为根一组,场景图的内容将由现场剪的宽度和高度,改变现场的大小(如果用户移阶段)不会改变场景图的布局。如果一个可调整大小的节点(布局区域或控制设置为根,根的大小将跟踪场景的大小,导致内容被传递出去。

 

将javafx嵌入Swing通过JFXPanel来实现

javafx.embed.swing

Class JFXPanel

  • java.lang.Object
    • java.awt.Component
      • java.awt.Container
        • javax.swing.JComponent
          • javafx.embed.swing.JFXPanel

 

以上为JFXPaenl的类结构图,他和Swing的累一样都继承于awt的Component,所以可以放入swing 组件

  String fxml = "login.fxml";
        FXMLLoader loader = new FXMLLoader();
        InputStream in = Main.class.getResourceAsStream(fxml);
        loader.setBuilderFactory(new JavaFXBuilderFactory());
        loader.setLocation(Main.class.getResource(fxml));
        AnchorPane page;
        try {
            page = (AnchorPane) loader.load(in);
        } finally {
            in.close();
        } 
        Scene scene = new Scene(page, 800, 600);

根据上面的代码可以通过FXML创建一个Secne 来放入JFXPanel

然后将JFXPanel放入需要用到的Swing 组件里就可以了。

需要注意的是JavaFx需要用他自己的线程来启动

    // create JavaFX scene
        Platform.runLater(new Runnable() {
            public void run() {
                createScene();
            }
        });
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值