我在尝试从场景切换到另一个场景时遇到了麻烦。场景是这样的:
当前视图和控制器:login.fxml
和LoginController
下一步视图和控制器:loggedWindow.fxml
和UserPanelController
。
现在,我在LoginController
并尝试将场景切换为loggedWindow.fxml
发送到UserPanelController
参数,但当我使用我的代码时,我得到:
javafx.scene.layout.Pane cannot be cast to javafx.fxml.FXMLLoader
FXMLLoader loggedWindow = null;
loggedWindow = FXMLLoader.load(getClass().getResource("loggedWindow.fxml")); // here crashes!
Pane root = loggedWindow.load();
UserPanelController controller = loggedWindow.getController();
controller.initData(customer);
Stage switchScene = (Stage)((Node)event.getSource()).getScene().getWindow();
switchScene.setResizable(false);
switchScene.setTitle("Welcome " + customer.FirstName + " " + customer.LastName);
switchScene.setScene(new Scene(root, 800, 500));
switchScene.show();
<Pane maxHeight="500.0" maxWidth="800.0" minHeight="500.0" minWidth="800.0" prefHeight="500.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Main.UserPanelController">
<children>
<ToolBar prefHeight="40.0" prefWidth="831.0">
<items>
.
.
stuff (buttons/labels and so on).
.
.
</Pane>
我将不胜感激任何帮助!提前谢谢。
还考虑了这个参考:Accessing FXML controller class
答案 0 :(得分:6)
您正在使用FXMLLoader的“load”方法,该方法返回.fxml文件的根节点。在那种情况下,它将返回您的窗格。
您应该用它来创建场景!
请参阅JavaFX教程中给出的示例,如:
Pane root = FXMLLoader.load(getClass().getResource("loggedWindow.fxml"));
Scene scene = new Scene(root, width, height, color);
其他方式,取自我的一个旧代码,使用非静态FXMLLoader:
FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlFile));
Parent root;
try {
root = loader.load();
} catch (IOException ioe) {
// log exception
return;
}
// Color.TRANSPARENT allows use of rgba colors (alpha layer)
setScene(new Scene(root, Color.TRANSPARENT));