我正在使用JavaFX并尝试使用FXML,但是我从来没有接受过任何形式的正式培训,所以我有点磕磕绊绊。
我一直在遇到这个错误: 引起:javafx.fxml.LoadException:元素没有定义默认属性。
我的目标是尝试初始化运行自己的FXML文件的Custom Controller类。因此,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>
其中控制器和root在Controller方法中设置。
我试图根据自己的需要调整此代码,我想知道是否有人可以向我解释为什么如果fx:root type =&#34; javafx.scene.layout出现此错误。垂直框&#34;永远改变成像fx:root type =&#34; javafx.scene.Parent&#34;如果你想要我,我可以发布一些实际的代码样本。
答案 0 :(得分:3)
引入默认属性的概念是为了将你的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并且浏览父类,您将注意到它没有定义您隐式假设的子属性 - Pane引入了子项。
您应该阅读http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html