1

我在 Swing 应用程序中使用 JavaFX 和 JFXPanel。我一直在使用 css 文件手动编写 JavaFX UI。我正在使用 NetBeans 8.1。

我想知道,在这种情况下,我可以使用 JavaFX Scene Builder 生成 UI 吗?AFAIK,输出是代表 UI 组件的 FXML 文件。这与使用 JavaFX 的 JFXPanel 方式兼容吗?

谢谢!

4

1 回答 1

1

如果您想JFXPanel在 Scene Builder 中管理自身和 Swing 组件,那么简短的回答是“否”。

从纯粹实用的角度来看,SceneBuilder 不支持 Swing 组件,这是您将要添加到JFXPanel.

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

显然,您可以使用 Scene Builder 来管理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);
}
于 2016-10-11T15:06:35.887 回答