我试图将存储的首选项值传递给设置窗口中的文本框,该文本框可以从用户登录窗口打开。我计划通过在打开之前设置控制器中的值来做到这一点。如您所见,我还试图使设置窗口成为登录窗口的子窗口。然而,我得到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();
}
任何关于如何解决这个问题的建议都是非常感谢的。
发布于 2015-02-20 09:58:33
您正在将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();
发布于 2015-02-20 10:00:01
试试这个:
FXMLLoader fxmlLoader = FXMLLoader(SettingsWindowController.class.getResource("Settings.fxml"));
AnchorPane page = (AnchorPane) fxmlLoader.load();
https://stackoverflow.com/questions/28625368
复制相似问题