JavaFx 如何为自定义 gui 构建器设置 FXML 加载器

道西

我在 FXML 文件中有一个包含以下行的组件:

<AnchorPane xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="DataTableController">

我正在尝试在控制器中加载 fxml:

public DataTableController() throws IOException {
        FXMLLoader.load(getClass().getResource("DataTable.fxml"));
}

我没有扩展 Application 的类,也没有 main 方法,因为我已经有一个由另一个应用程序(自定义场景构建器)启动的窗口。所以,我只想在自定义视图组件的窗口上显示 AnchorPane。我可以使用我的控制器做到这一点,没有问题。我的问题是当我不使用 fx:root 时我不知道如何加载 FXML 因为当我将 AnchorPane 更改为 fx:root 时,我可以加载 FXML 并设置 root 和设置控制器并查看 fxml 文件的内容在我的窗户上。但是,然后我有一个问题,我无法在 fxml 文件中设置控制器,因为它是设置控制器的重复,如果我没有在 fxml 文件中设置控制器,那么我会收到一个错误,因为我有一个需要设置控制器的按钮。

那么,我该怎么办?我们什么时候使用 fx:root 以及为什么?(我用谷歌搜索并检查了其他 SO 条目,但我仍然不清楚)。对我的问题的任何建议和关于 fx:root 的一些示例的清晰解释将不胜感激。

我对 JavaFX 和 SO 很陌生,所以如果我不能很好地解释我的问题,请让我澄清一下。谢谢你的帮助!

编辑:按照@fabian 的建议更改了 java 类,我之前实际尝试过,并得到了上面提到的这个错误。

费边

如果我没有在 fxml 文件中设置控制器,那么我会收到一个错误,因为我有一个需要设置控制器的按钮

不对。只要您FXMLLoader在加载 fxml 之前设置了控制器实例,就不会有问题。

推荐的实现方式如下:

public class DataTableController extends AnchorPane {

    public DataTableController() throws IOException {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("DataTable.fxml"));

        // set this instance as root & controller
        loader.setRoot(this);
        loader.setController(this);

        loader.load();
    }

    ...

}
<fx:root xmlns="http://javafx.com/javafx/9.0.1"
         xmlns:fx="http://javafx.com/fxml/1"
         type="javafx.scene.layout.AnchorPane">
    ...
</fx:root>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在fxml中扩展的场景构建器自定义组件

JavaFX-如何获取FXML控制器?

将自定义FXML属性设置为自定义javafx组件的参数

JavaFX FXML控制器ClassNotFoundException

如何将 fxml 创建的 javafx GUI 与硬编码创建的 javafx gui 合并?

如何扩展使用FXML的自定义JavaFX组件

在intelliJ中将自定义组件添加到FXML场景构建器

自定义组件JavaFX的自定义操作发射器属性-如何?

JavaFX如何设置FXML文件的样式

使用fxml作为fxml中的组件时,JavaFX FXML无法正确看到我的控制器方法“未在根组件上定义控制器”

如何为嵌套的 JAR 文件创建自定义类加载器

如何为Map实现创建自定义迭代器?

JavaFx FXML加载文件设置根问题

从fxml加载器访问fxml控制器的方法

NetBeans GUI构建器:“正在加载...”消息

如何为javafx阶段加载器确定函数

加载 FXML 文件的 JavaFX 异常

javafx场景构建器1.1中的JAR / FXML Manager选项位于何处?

如何为运行简单的Web浏览器构建自定义发行版?

JavaFX:如何在同一fxml文件中动态更改控制器?

如何通过javafx中的控制器将标签添加到fxml文件?

如何使用不同的fxml文件创建多个javafx控制器?

如何将参数传递给 javafx 中 fxml 控制器类的构造函数?

JavaFX-许多静态FXML控制器

使用不带FXML的JavaFX控制器

是否可以通过 FXML 引用 JavaFX 中的转换器?

嵌套控制器的JavaFX8 fxml命名

从FXML孩子的JavaFX访问父控制器类

向NetBeans GUI构建器添加自定义组件!(WorldWind)