我是 JavaFX 的初学者。我需要通过单击已创建的按钮打开另一个屏幕。为此,我尝试搜索,但没有得到任何有用的信息,因为我找到的每个教程都重定向以创建新屏幕。但我想打开已经创建的屏幕。
为此,我在controller.java中编写以下代码
@FXML
public void handleNewTestBedButtonAction(ActionEvent event) throws IOException {
URL url = getClass().getResource("com/sobc/testbed/gui/testbedform.fxml");
FXMLLoader fxmlloader = new FXMLLoader();
fxmlloader.setLocation(url);
fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane pane = new AnchorPane();
pane.getChildren().clear();
pane.getChildren().add((Node) fxmlloader.load(url.openStream()));
// here we go
//((SOARiteController) fxmlloader.getController()).setContext();
}
fxml代码
<Button id="newtestbedbtn" fx:id="newTestBedButtonId" mnemonicParsing="false" onAction="#handleNewTestBedButtonAction" onMouseEntered="#NewTestBedButtonMouseEntered" onMouseExited="#NewTestBedButtonMouseExited" styleClass="imgbtn" text="" wrapText="false">
但是我遇到了以下异常
Caused by: java.lang.NullPointerException
at com.soab.SOARiteController.handleNewTestBedButtonAction(SOARiteController.java:52)
如何在另一个屏幕上打开一个屏幕?
使用以下代码替换您的 Fxml 加载器,这是加载 fxml 文件的正确方法。
URL url = getClass().getResource("com/sobc/testbed/gui/testbedform.fxml");
FXMLLoader loader = new FXMLLoader(url);
Node node = (Node) loader.load();