javafx.scene.layout.Pane无法强制转换为javafx.fxml.FXMLLoader

Shm*_*wel 2 java javafx

我在尝试从场景切换到另一个场景时遇到了麻烦.场景是这样的:

当前视图和控制器:login.fxmlLoginController

下一步查看和控制器:loggedWindow.fxmlUserPanelController.


现在,我正在LoginController尝试将场景切换到loggedWindow.fxml发送到UserPanelController参数,但是当我使用我的代码时,我得到:

javafx.scene.layout.Pane cannot be cast to javafx.fxml.FXMLLoader
Run Code Online (Sandbox Code Playgroud)

的LoginController:

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();
Run Code Online (Sandbox Code Playgroud)

LoggedWindow.fxml

<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>
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助!提前致谢.

更新1

还考虑了这个参考:访问FXML控制器类

Vin*_*OPS 6

您正在使用FXMLLoader的"load"方法,该方法返回.fxml文件的根节点.在那种情况下,它将返回您的窗格.

你应该用它来创建你的场景!

请参阅JavaFX教程中给出的示例,如:

Pane root = FXMLLoader.load(getClass().getResource("loggedWindow.fxml"));
Scene scene = new Scene(root, width, height, color);
Run Code Online (Sandbox Code Playgroud)

其他方式,取自我的一个旧代码,使用非静态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));
Run Code Online (Sandbox Code Playgroud)