设置root的JavaFx FXML加载文件问题

作为javaFx的新手,并且想要使用场景构建器进行GUI开发,我遇到了一个问题,没有运气搜索网站或网络一般我的问题,虽然已经提出类似的问题,认为可能需要不同的视角。 我试图在快速构建之后通过Netbeans加载FXML文件以测试function,因此代码很简单,但我无法在控制器中设置根文件。 我的代码是以下公共类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而没有运气的建议,我继续在编译时获得Loadexception:

Application start方法中的exception…引起:javafx.fxml.LoadException:尚未设置Root。 在加载之前使用方法setRoot()。

但是当我使用的时候

 scene.setRoot(root); 

经历了同样的例外

我已经将问题缩小到这样一个事实,即我的FXML文件无法在Parent对象中设置为root,但却无法解决这个问题。 任何建议都会非常感谢。

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

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

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

    

编辑如果Netbeans给你带来问题,我建议将Eclipse与e(fx)clipse插件一起使用 。 有一个非常准确,但几乎所有你需要的, 教程 。

在场景构建器中取消选中id :: root或将id :: root更改为vbox

只是你不应该在场景构建器中使用fx:root构造。 所以从fxml文件中删除这行代码。

例如: