如何在JavaFX中将值传递给Window

时间:2015-02-20 09:18:44

标签: java javafx

我正在尝试将存储的首选项值传递到可以从用户登录窗口打开的设置窗口中的文本框。我打算通过在打开之前设置控制器中的值来完成此操作。如您所见,我还尝试将设置窗口设置为登录窗口的子项。但是,由于我不理解的原因,我得到了javafx.scene.layout.AnchorPane cannot be cast to javafx.fxml.FXMLLoader,并且完全不知道该怎么做。

按下按钮打开设置窗口的代码如下:

@FXML
void OpenSettingsWindow(ActionEvent event) {

    try {
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader = FXMLLoader.load(SettingsWindowController.class
                .getResource("Settings.fxml"));
        AnchorPane page = (AnchorPane) FXMLLoader.load(SettingsWindowController.class
                .getResource("Settings.fxml"));
        Scene scene = new Scene(page);
        root = new Stage();

        root.initModality(Modality.WINDOW_MODAL);
        root.initOwner(Main.primaryStage);
        root.setScene(scene);
        SettingsWindowController controller = fxmlLoader.getController();
        String databaseAddressValue = "databaseAddressValue";
        controller.setDatabaseAddressValue(Preferences
            .systemRoot()
            .node("preferences.SystemPreferences")
            .get(SystemPreferences.databaseAddress, databaseAddressValue));
        root.show();
    } catch (Exception e) {
        e.printStackTrace();
    }

非常感谢任何关于如何解决这个问题的建议。

2 个答案:

答案 0 :(得分:1)

您要将FXMLLoader.load()的返回值分配给FXMLLoader引用。

FXMLLoader.load()返回FXML文件中的最高对象,肯定不是FXMLLoader对象。

如果你想使用控制器类进行事件处理和正确的初始化,你必须先设置它并以另一种方式加载FXML(我假设SettingsWindowController是你的控制器类并且有一个默认的构造函数):

    SettingsWindowController controller = new SettingsWindowController();
    FXMLLoader loader = new FXMLLoader(SettingsWindowController.class
            .getResource("Settings.fxml"));
    loader.setController(controller);
    AnchorPane page = (AnchorPane)loader.load(); 

答案 1 :(得分:0)

试试这个:

FXMLLoader fxmlLoader = FXMLLoader(SettingsWindowController.class.getResource("Settings.fxml"));
AnchorPane page = (AnchorPane) fxmlLoader.load();