JavaFx FXML加载文件设置根问题

我是javaFx的新手,并且希望使用scenebuilder进行GUI开发,尽管遇到了类似的问题,但仍可能需要不同的观点,但我遇到了一个问题,尽管在网站或Web上搜索我的运气都不好。我试图在快速构建以测试功能后通过Netbeans加载FXML文件,以便代码简单,但是我无法在控制器中设置根文件。我的代码是以下公共类Divergex扩展的Application

{

@Override

public void start(Stage stage) throws Exception {

Parent root = FXMLLoader.load(getClass().getResource("DivergexGUI.fxml"));

Scene scene = new Scene(root);

scene.setRoot(root);

stage.setScene(scene);

stage.show();

}

我尝试过将fxroot更改为Vbox的建议,但是没有运气,我继续在编译时遇到Load异常:

应用程序启动方法中的异常…原因:javafx.fxml.LoadException:尚未设置根。加载前使用方法setRoot()。

但是当我使用

scene.setRoot(root);

遇到同样的例外

我已将问题缩小到以下事实:我的FXML文件无法设置为Parent对象的根目录,但是没有运气来解决这个问题。任何建议将非常感谢。

回答:

<fx:root>为您的FXML文件指定一个“动态根”;这意味着FXML文件的根是在加载文件之前在加载器上设置的对象。这通常用于自定义控件,在该控件中您希望控件是其子类Node,可以使用常规Java代码实例化该控件,但希望使用FXML定义其布局。标准文档中<fx:root>显示了正确使用(或至少是如何使用它的示例)。特别是,如果使用,则必须:<fx:root>

  1. 创建一个FXMLLoader实例,而不是使用静态便捷FXMLLoader.load(URL)方法
  2. 在该实例上调用setRoot(…),并传入将成为FXML根的对象。

对于标准的FXML使用,您只需使用常规实例声明作为根。几乎每个可用的示例都是以这种方式工作的:最好的起点是官方教程。在您的情况下,由于您需要一个VBox,因此您可能只需要

<VBox xmlns="javafx.com/javafx/8"; xmlns:fx="javafx.com/fxml/1"; fx:controller="divergex.DivergexGUIController">

<!-- ... -->

</VBox>

如果Netbeans给您带来问题,建议您将Eclipse与e(fx)clipse插件一起使用。有一个非常准系统的东西,但是您几乎需要的所有东西,tutorial。

以上是 JavaFx FXML加载文件设置根问题 的全部内容, 来源链接: utcz.com/qa/415982.html

回到顶部