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

时间:2014-12-18 22:05:56

标签: java javafx

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

当前视图和控制器login.fxmlLoginController

下一步视图和控制器loggedWindow.fxmlUserPanelController


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

javafx.scene.layout.Pane cannot be cast to javafx.fxml.FXMLLoader

的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();

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>

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

更新1

还考虑了这个参考:Accessing FXML controller class

1 个答案:

答案 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));