private BorderPane rootLayout;
private VBox toolbarLayout;
private URL path;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
FXMLLoader loader = new FXMLLoader();
// Root View
path = getClass().getResource("mainLayout.fxml");
try {
loader.setLocation(path);
rootLayout = (BorderPane) loader.load();
} catch (IOException e){
System.out.println("Not found: " + path);
e.printStackTrace();
}
// Toolbar View
path = getClass().getResource("toolbar/toolbarView.fxml");
try {
toolbarLayout = (VBox) loader.load();
} catch (IOException e){
System.out.println("Not found: " + path);
e.printStackTrace();
}
rootLayout.getChildren().add(toolbarLayout);
Scene scene = new Scene(rootLayout);
stage.setScene(scene);
stage.show();
}
javafx.fxml.LoadException: Root value already specified.
为了完整起见,下面是toolbarview.fxml:
<VBox fx:id="idToolbar" alignment="TOP_CENTER" maxHeight="-Infinity"
maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
prefHeight="400.0" prefWidth="100.0" spacing="20.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button mnemonicParsing="false" text="Button" />
<Button mnemonicParsing="false" text="Button" />
<Button mnemonicParsing="false" text="Button" />
</children>
<opaqueInsets>
<Insets />
</opaqueInsets>
<padding>
<Insets top="20.0" />
</padding>
</VBox>
root
属性包含对FXML文件指定的结构的引用;即FXML文件的根元素创建的对象。假设您没有使用“Dynamic root”(
)模式,那么根将作为Load
过程的一部分被设置为与FXML的根元素相对应的对象。如果在这个阶段它不是null
(即,如果它已经被设置),那么您将得到一个异常。controller
属性也是如此:如果FXML文件指定fx:controller
属性,则控制器将被设置为load()
进程的一部分;如果不是null
,则引发异常。
FXMLLoader
实际上只设计为使用一次,因为您有许多相互依赖的属性,这些属性通常是作为加载过程的一部分设置的:根
、位置
、控制器
、资源
和命名空间
的元素。因此,您应该为每个要加载的FXML文件创建一个新的FXMLLoader
:
FXMLLoader loader = new FXMLLoader();
// Root View
path = getClass().getResource("mainLayout.fxml");
try {
loader.setLocation(path);
rootLayout = (BorderPane) loader.load();
} catch (IOException e){
System.out.println("Not found: " + path);
e.printStackTrace();
}
// Toolbar View
loader = new FXMLLoader();
path = getClass().getResource("toolbar/toolbarView.fxml");
try {
// note you omitted this line:
loader.setLocation(path);
toolbarLayout = (VBox) loader.load();
} catch (IOException e){
System.out.println("Not found: " + path);
e.printStackTrace();
}
rootLayout.getChildren().add(toolbarLayout);
通过仔细地取消设置作为上一个加载过程的一部分设置的任何内容,可以重用FXMLLoader
:
FXMLLoader loader = new FXMLLoader();
// Root View
path = getClass().getResource("mainLayout.fxml");
try {
loader.setLocation(path);
rootLayout = (BorderPane) loader.load();
} catch (IOException e){
System.out.println("Not found: " + path);
e.printStackTrace();
}
loader.setRoot(null);
loader.setController(null);
loader.setResources(null);
loader.getNamespace().clear();
// Toolbar View
path = getClass().getResource("toolbar/toolbarView.fxml");
try {
// note you omitted this line:
loader.setLocation(path);
toolbarLayout = (VBox) loader.load();
} catch (IOException e){
System.out.println("Not found: " + path);
e.printStackTrace();
}
rootLayout.getChildren().add(toolbarLayout);
我正在尝试使用Maven编写一个JavaFx8应用程序。我编写了一个简单的应用程序主类和一个fxml文件(一个不执行任何操作的根fxml文件)。 当我尝试加载fxml根文件时,出现错误“Location is not set”: 我不是JavaFx8的新手,我已经遇到过这种错误,但这次我没有发现问题。 我的类是:app.java rootLayout.fxml: 我检查了打印出getClass输出
问题内容: 刚开始使用JavaFx(通常也是Java的初学者),几天来,我一直在尝试使其工作,但一直无法解决。我收到一个空指针异常,该异常在这里介绍: 什么是NullPointerException,如何解决它? 因此,我希望这个问题不会因为重复而结束,因为我知道npe是什么,并且(通常)知道如何解决此问题。 我也(大多数时候)知道如何躲避它们和/或修复它们(如果发生),但是在这种情况下,我只是不
在我的应用程序中,我希望有一个borderpane作为根,在左侧我有三个按钮,根据我按下的按钮,一个新的带有tabpane的fxml应该加载在borderpane的中心,当我按下按钮时,我会得到一个npe,我认为这是由于我没有引用右边的borderpane,但我看不出哪里出错了。 我要做的是,当我按下按钮custMenuButton时,fxml应该加载并设置为BorderPane中的中心。 主类
大家好,我是fxml的新手,所以请忽略我的愚蠢的问题,这里有几个东西,我尝试了两天,但没有成功 > 从表中删除空白,即表大小应达到可用行数(行数不同) 当用户单击表行(任何显示值)时,新的fxml文件将在定位窗格(显示tableview)中打开,分配给tableview,但我想在主视图中显示它(这里显示的是整个表和两个文本字段以及主堆栈后面的搜索按钮)主视图(其他只有标题和侧栏的fxml文件) 如
问题内容: 我一直试图将多个文件加载到一个表中,以便它们适合同一行。 我可以将它们分别插入,但是问题出在值之内,因此我打算加入该表。如果发生这种情况,我会得到太多的值-无用的数据。 我实际上研究过的另一件事是将文件与 但是,它变成了一个烂摊子。如果第一种方法不起作用,那么我可以使用第二种方法,但是我也需要有关它的建议。 问题答案: 您可以将4个文件加载到4个(临时)表中(每个表都有一个自动编号的字
所以,我一直试图将一个边框放在另一个边框(中心部分)中,但到目前为止没有成功。 我尝试过(在从FXML加载的窗格和父场景中): 使用并设置顶部、底部、左侧和右侧锚 在主边框的顶部和左侧添加(无效且在调整舞台大小时不起作用) 当前布局: 我正在寻找的结果(大致) 这个想法是,即使当我调整窗口大小时,FXML布局也将留在MainBorderPane的中心; LoginController.java l