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



新的javaFx和想要使用场景生成器的GUI开发,我遇到了一个问题,没有运气搜索网站,也没有一般的网络为我的问题,虽然类似的问题已经被问到,认为一个不同的角度可能需要。我试图通过Netbeans加载一个FXML文件后快速构建测试功能,所以代码很简单,但我不能得到根文件设置在控制器。我的代码如下公共类Divergex扩展应用程序{

@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. xml. loadexception: Root未设置。加载前使用setRoot()方法

然而当我使用

scene.setRoot(root); 

遇到相同的异常

我已经把问题缩小到这样一个事实,即我的FXML文件无法被设置为父对象中的根,但在解决这个问题时没有运气。如有任何建议,非常感谢。

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

  1. 创建FXMLLoader实例,而不是使用静态方便的FXMLLoader.load(URL)方法
  2. 在该实例上调用seroot(…),并传入要成为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插件。这是一个非常简单的,但几乎所有你需要的教程。

uncheck id::root或者将id::root改为vbox

只是你不应该在场景生成器中使用fx:root construct。因此,从FXML文件中删除这行代码。

例如:<fx:root prefHeight="246.0" prefWidth="479.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.mycontroller">

当您使用场景生成器创建FXML文件时。它使用fx: root作为窗格。将其替换为锚窗格

   AnchorPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.controller.Controller

这对我有用。任何人都可以尝试,它可能对你有帮助

相关内容

  • 没有找到相关文章

最新更新