加载 fxml 文件并设置其标签文本时出现 JavaFX 问题
JavaFX lssue when loading fxml file and seting its Label text
我昨天提出了一个类似的问题,但我认为它没有得到很好的解释,所以我想再问一次,但我在我的代码中做了一些修改。如果我写得太多,我深表歉意,但我想让所有内容都易于理解。
所以,我正在制作一个宠物小精灵模拟器,您可以在其中捕捉和训练宠物小精灵。
我有一个主要的 fxml 文件,其中包含用于访问不同 fxml 文件的按钮,例如 catch、battle、shop、bag...
昨天我在做你所有物品将被存放的袋子。
一切正常,windows 在它们之间正常切换。当我试图为包中的每件物品添加标签时,问题就来了,这是为了向用户展示他对每件物品的数量。所以我创建了所有没有文本的标签,所以它们是空的。
它们将从我从数据库中获得的信息中得到填充,这东西也能正常工作,我连接到数据库并获取项目数量。当我想显示我包里的物品数量时,问题就来了 window.
为什么?因为正如您想象的那样,我希望当您单击包按钮时,包文件会加载所有标签,其中包含每件商品的数量。标签是在 bag fxml 控制器上定义的,所以如果我想用一些文本填充它们,我不能从使用另一个控制器的 main windows 来完成,我需要通过 bag 控制器来完成。
这是我试图让它工作的代码(位于主控制器中):
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
AnchorPane pane = FXMLLoader.load(getClass().getResource("mochila.fxml"));
anchorPaneContent.getChildren().setAll(pane);
anchorPane2.setStyle("-fx-background-color: #3f3f3f;");
cm.getCantidad();
}
getCantidad 是我的包控制器中的一个函数,就是它:
public void getCantidad() {
lblpokeballCount.setText("Cantidad: "+pokeballcount);
lblsuperballCount.setText("Cantidad: "+superballcount);
lblultraballCount.setText("Cantidad: "+ultraballcount);
lblmasterballCount.setText("Cantidad: "+masterballcount);
}
所以当我尝试从主控制器运行这个函数时,它returns我空指针异常。这意味着标签没有初始化,但是当我第一次输入时 AnchorPane pane = FXMLLoader.load(getClass().getResource("mochila.fxml"));
是否应该加载文件中的所有资源?
因为我在我的包文件中创建了一个按钮,当点击时 运行 是相同的功能,并且它工作正常因为我从同一个 controller/file.
调用它
所以现在我真的不知道该怎么做,这是学校的项目,但我的编程老师从未接触过 javafx,所以他们甚至不知道我在做什么。你是我唯一的希望。我试图理解这个 post:post
但我根本不理解它,因为我对所有这些东西都是新手。如果你们能帮助我,我将不胜感激,谢谢!
编辑:
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
anchorPaneContent.getChildren().setAll(loader);
controladorMochila controller = loader.<controladorMochila>getController();
controller.getCantidad();
}
anchorPaneContent 是位于主窗格内的锚定窗格。所有按钮都在主窗格中,根据您单击的按钮,anchorpanecontent 将更改为另一个 fxml 文件。我试着像上面提到的 post 那样做。但我不能做 anchorPaneContent.getChildren().setAll(loader);
因为它说:节点 setAll 不适用于参数(FXMLLoader)
您正在尝试将 FXMLLoader
添加到锚定窗格,这将不起作用,因为 FXMLLoader
不是可视组件(它是加载 FXML 文件的东西)。
此外,您试图从 FXMLLoader
中获取控制器,但实际上并未加载 FXML 文件;这不会起作用,因为控制器 class 是在 FXML 文件中指定的(因此 FXMLLoader
在加载文件之前不知道要创建哪种控制器)。
您需要加载 FXML 文件并将结果添加到锚定窗格:
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
anchorPaneContent.getChildren().setAll(loader.load());
controladorMochila controller = loader.<controladorMochila>getController();
controller.getCantidad();
}
或者,如果您想更明确一点:
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
Parent pane = loader.load();
anchorPaneContent.getChildren().setAll(pane);
controladorMochila controller = loader.<controladorMochila>getController();
controller.getCantidad();
}
我昨天提出了一个类似的问题,但我认为它没有得到很好的解释,所以我想再问一次,但我在我的代码中做了一些修改。如果我写得太多,我深表歉意,但我想让所有内容都易于理解。
所以,我正在制作一个宠物小精灵模拟器,您可以在其中捕捉和训练宠物小精灵。 我有一个主要的 fxml 文件,其中包含用于访问不同 fxml 文件的按钮,例如 catch、battle、shop、bag... 昨天我在做你所有物品将被存放的袋子。
一切正常,windows 在它们之间正常切换。当我试图为包中的每件物品添加标签时,问题就来了,这是为了向用户展示他对每件物品的数量。所以我创建了所有没有文本的标签,所以它们是空的。
它们将从我从数据库中获得的信息中得到填充,这东西也能正常工作,我连接到数据库并获取项目数量。当我想显示我包里的物品数量时,问题就来了 window.
为什么?因为正如您想象的那样,我希望当您单击包按钮时,包文件会加载所有标签,其中包含每件商品的数量。标签是在 bag fxml 控制器上定义的,所以如果我想用一些文本填充它们,我不能从使用另一个控制器的 main windows 来完成,我需要通过 bag 控制器来完成。
这是我试图让它工作的代码(位于主控制器中):
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
AnchorPane pane = FXMLLoader.load(getClass().getResource("mochila.fxml"));
anchorPaneContent.getChildren().setAll(pane);
anchorPane2.setStyle("-fx-background-color: #3f3f3f;");
cm.getCantidad();
}
getCantidad 是我的包控制器中的一个函数,就是它:
public void getCantidad() {
lblpokeballCount.setText("Cantidad: "+pokeballcount);
lblsuperballCount.setText("Cantidad: "+superballcount);
lblultraballCount.setText("Cantidad: "+ultraballcount);
lblmasterballCount.setText("Cantidad: "+masterballcount);
}
所以当我尝试从主控制器运行这个函数时,它returns我空指针异常。这意味着标签没有初始化,但是当我第一次输入时 AnchorPane pane = FXMLLoader.load(getClass().getResource("mochila.fxml"));
是否应该加载文件中的所有资源?
因为我在我的包文件中创建了一个按钮,当点击时 运行 是相同的功能,并且它工作正常因为我从同一个 controller/file.
所以现在我真的不知道该怎么做,这是学校的项目,但我的编程老师从未接触过 javafx,所以他们甚至不知道我在做什么。你是我唯一的希望。我试图理解这个 post:post
但我根本不理解它,因为我对所有这些东西都是新手。如果你们能帮助我,我将不胜感激,谢谢!
编辑:
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
anchorPaneContent.getChildren().setAll(loader);
controladorMochila controller = loader.<controladorMochila>getController();
controller.getCantidad();
}
anchorPaneContent 是位于主窗格内的锚定窗格。所有按钮都在主窗格中,根据您单击的按钮,anchorpanecontent 将更改为另一个 fxml 文件。我试着像上面提到的 post 那样做。但我不能做 anchorPaneContent.getChildren().setAll(loader);
因为它说:节点 setAll 不适用于参数(FXMLLoader)
您正在尝试将 FXMLLoader
添加到锚定窗格,这将不起作用,因为 FXMLLoader
不是可视组件(它是加载 FXML 文件的东西)。
此外,您试图从 FXMLLoader
中获取控制器,但实际上并未加载 FXML 文件;这不会起作用,因为控制器 class 是在 FXML 文件中指定的(因此 FXMLLoader
在加载文件之前不知道要创建哪种控制器)。
您需要加载 FXML 文件并将结果添加到锚定窗格:
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
anchorPaneContent.getChildren().setAll(loader.load());
controladorMochila controller = loader.<controladorMochila>getController();
controller.getCantidad();
}
或者,如果您想更明确一点:
@FXML
void mochila (ActionEvent event) throws IOException, SQLException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("mochila.fxml"));
Parent pane = loader.load();
anchorPaneContent.getChildren().setAll(pane);
controladorMochila controller = loader.<controladorMochila>getController();
controller.getCantidad();
}