设置根目录时出现JavaFx FXML加载文件问题
刚接触javaFx并希望使用scenebuilder进行GUI开发,我遇到了一个问题,在搜索网站或整个web时都没有找到我的问题,尽管有人问过类似的问题,但我认为可能需要不同的视角。在快速构建测试功能之后,我试图通过Netbeans加载一个FXML文件,因此代码很简单,但我无法在控制器中设置根文件。我的代码如下 公共类Divergex扩展了应用程序{设置根目录时出现JavaFx FXML加载文件问题,java,netbeans,javafx,scenebuilder,Java,Netbeans,Javafx,Scenebuilder,刚接触javaFx并希望使用scenebuilder进行GUI开发,我遇到了一个问题,在搜索网站或整个web时都没有找到我的问题,尽管有人问过类似的问题,但我认为可能需要不同的视角。在快速构建测试功能之后,我试图通过Netbeans加载一个FXML文件,因此代码很简单,但我无法在控制器中设置根文件。我的代码如下 公共类Divergex扩展了应用程序{ @Override public void start(Stage stage) throws Exception { Parent ro
@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的建议,但没有成功,我继续在编译时遇到加载异常:
应用程序启动方法中出现异常。。。
原因:javafx.fxml.LoadException:尚未设置根。请在加载前使用方法setRoot()
然而当我使用
scene.setRoot(root);
同样的例外情况也会发生
我已将问题缩小到无法将FXML文件设置为父对象中的根,但没有解决此问题的运气。任何建议都将非常感谢。
指定“动态根”对于您的FXML文件,这意味着FXML文件的根是在加载文件之前在加载程序上设置的对象。这通常用于自定义控件,其中您希望控件是可以使用常规Java代码实例化的节点
的子类,但希望使用FXML定义其布局。正确使用
(或至少是如何使用de>的示例)显示在中。特别是,如果使用
,则必须:
fxmloader
实例,而不是使用静态便利fxmloader.load(URL)
方法VBox
,您可能只需要
<VBox xmlns="javafx.com/javafx/8"; xmlns:fx="javafx.com/fxml/1"; fx:controller="divergex.DivergexGUIController">
<!-- ... -->
</VBox>
编辑如果Netbeans给您带来了问题,我建议使用Eclipse和。有一个非常简单的,但几乎是您所需要的一切,。取消选中id::root in Science builder
或者将id::root更改为vbox,只是不应在场景生成器中使用fx:root构造。 因此,请从fxml文件中删除这行代码
例如:
在场景生成器的帮助下创建FXML文件时。它使用fx:root作为窗格。将其替换为锚窗格
AnchorPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.controller.Controller
它对我很有用。任何人都可以尝试,它可能会对你有所帮助你能显示fxml文件,或者至少显示它的根元素吗?是的,这是完整的文件,同样简单,只需获得一个工作表单为什么你要使用
?它是Scenebuilder的默认构建,并设置了一个控制器,我对JavaFx不熟悉,所以教程我ent让我用它来写我的FXML,如果有更好的选择,我很乐意使用它,我只是还没有找到一个明确的解决方案。我不是一个(经常使用的)SceneBuilder用户。我认为,Ancorpane
是SceneBuilder的默认根元素。这已经够糟糕了-Ancorpane
对于大多数应用程序来说都是毫无用处的。
实际上是一个更糟糕的默认选择;它实际上只适用于非常特殊的用例。我尝试使用Ancorpane作为我的根元素,但没有成功支持控制器,VBox也不支持控制器,但在使用VBox声明编译后,我成功构建了带有按钮功能的GUI,谢谢。只是不确定这是否正常,因为我的IDE声称VBox不支持控制器属性。请解释“不支持控制器”…您只需向FXML.correct的根元素添加一个fx:controller
属性,但在添加该属性时,Netbeans会显示一条警告“…Class'javafx.scene.layout.VBox'不支持属性'controller'…”听起来你可能把controller='…'
而不是fx:controller='…'
?没有使用fx:controller
有趣的是,它工作正常,只显示警告。例如,你让答案未完成。