今天抽出时间研究了下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();
}
});