Javafx 元素未定义默认属性

Javafx 元素未定义默认属性,javafx,fxml,Javafx,Fxml,我正在使用JavaFX并尝试使用FXML,但是我从未接受过任何正式的培训,所以我有点结结巴巴 我一直遇到以下错误: 原因:javafx.fxml.LoadException:元素未定义默认属性 我的目标是尝试初始化运行自己的FXML文件的自定义控制器类。因此,Oracle给出的代码示例如下所示: <fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml"> <TextField fx

我正在使用JavaFX并尝试使用FXML,但是我从未接受过任何正式的培训,所以我有点结结巴巴

我一直遇到以下错误: 原因:javafx.fxml.LoadException:元素未定义默认属性

我的目标是尝试初始化运行自己的FXML文件的自定义控制器类。因此,Oracle给出的代码示例如下所示:

<fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml"> 
  <TextField fx:id="textField"/>
  <Button text="Click Me" onAction="#doSomething"/>
</fx:root>

其中控制器和根在控制器方法中设置


我正在尝试根据自己的需要修改此代码,我想知道如果fx:root type=“javafx.scene.layout.VBox”更改为类似于fx:root type=“javafx.scene.Parent”的内容,是否有人可以向我解释为什么会出现此错误,我可以发布一些实际的代码示例。

默认属性的概念被引入到短路FXML中,实际上您必须编写:

<fx:root type="javafx.scene.layout.VBox" xmlns:fx="http://javafx.com/fxml"> 
  <children>
    <TextField fx:id="textField"/>
    <Button text="Click Me" onAction="#doSomething"/>
  </children>
</fx:root>

如果您现在将容器类型更改为Parent并浏览父类,您会注意到它没有定义您隐式假定的children属性—children是由窗格引入的


你可能应该读一下

hmm,我不确定它是否回答了这个问题。引用“。。。类可以使用javafx.beans包中定义的*@DefaultProperty注释定义“默认属性”。如果存在,表示默认属性的子元素可以从标记中省略。“--这不在FXML中。还有一个默认属性不是真正的初始化,我相信它需要一个实现初始化接口的控制器。在我看来,它回答了这个问题。最初的VBox示例之所以有效,是因为VBox有一个默认属性“children”,这是隐式假定的,因此可以假定TextField和Button元素是VBox的子元素。但是,父级没有FXMLLoader的默认属性,并且不知道如何处理这两个元素。