2016-10-11 80 views
1

我使用JavaFX的Swing应用程序,与JFXPanel使用与JFXPanel。我一直在用css文件手动编写JavaFX UI。我正在使用NetBeans 8.1。JavaFX的场景生成器 - 它是在Swing

我想知道,在这种情况下,我可以使用JavaFX的场景生成器生成的用户界面? AFAIK,输出是表示UI组件的FXML文件。这与JFXPanel使用JavaFX的方式是否兼容?

谢谢!

回答

1

如果你要管理的JFXPanel本身,Swing组件,在场景生成器,那么简单的答案是“否”。

从纯粹的实践角度来看,SceneBuilder不支持Swing组件,这就是您将要添加到JFXPanel中的内容。

另一个问题是与线程有关。 Scene Builder只生成FXML。 FXML通过其load(...)方法之一由FXMLLoader加载。该方法必须在单个线程上执行。如果混合使用Swing组件和JavaFX组件,则必须适当地管理线程,如JFXPanel documentation中所述。由于您无法告诉FXMLLoader要在JavaFX应用程序线程上处理FXML的哪些部分以及要在AWT事件派发线程上处理哪些部分,因此无法加载描述Swing和JavaFX混合的FXML文件遵守这两个工具包的线程规则的组件。

很明显,你可以使用场景生成器只是为了管理JFXPanel的内容;这与Scene Builder的“常规”用法相同。同样,所有的Scene Builder都会生成FXML,而FXML只是描述了要创建什么对象以及它们如何相互关联。所以你可以这样做

private JFXPanel jfxPanel ; 

// build Swing components, initialize jfxPanel, etc 

// run on FX Application Thread: 
private void initFX() { 

    FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/fxml/file")); 
    Parent root = loader.load(); 
    Scene scene = new Scene(root); 
    jfxPanel.setScene(scene); 
} 
+0

因为应用程序是用Swing编写的,所以迁移到JavaFX并不是一件容易的事情。因此,对于新添加的UI,我开始使用JFXPanel编写JavaFX。使用SceneBuilder,是否有可能只包含部分UI,这是新添加的JavaFX UI?如果是,那么我不需要在代码和css中设计JavaFX组件,这很耗时。 –

+0

好的,我从你的问题中了解到你想在Scene Builder中创建/编辑'JFXPanel'和其他Swing组件。如果你只想使用Scene Builder来生成JFXPanel的内容,那么你当然可以这样做:它和你通常使用它的方式完全一样。 –