我有一个窗口,我可以从中打开另一个窗口,我想从第一个窗口调用一个影响第一个窗口的函数。我怎么能这样做?
它没有那样工作
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getClassLoader().getResource("view/MyWindow.fxml"));
loader.load();
MyWindowController MyWindow = loader.getController();
MyWindow.someFunction();
它只能起作用,如果我调用一个影响新窗口的函数,就像那样
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getClassLoader().getResource("view/MyWindow.fxml"));
loader.load();
MyWindowController MyWindow = loader.getController();
MyWindow.someFunction();
Parent root;
root = loader.getRoot();
Stage stage = new Stage();
stage.setTitle("View employee");
stage.setScene(new Scene(root));
stage.show();
stage.setResizable(false);
答案 0 :(得分:0)
我相信你对FXMLLoader,Stages和Scenes所做的事情有误解。
Window本身就是舞台,它的内容是Scene(s)(可能是多个),而那些场景有控制器可以很好地控制它们。 您必须在某个时间点将要修改的场景的控制器传递给应该进行修改的场景控制器。
在loader.load();
之后,您还没有Window,也无法以这种方式访问现有的Windows。您有一个可用于以Parent root
形式创建新场景的变量。就是这样。
或者,您可以查看可能只是想要实现的 JavaFX的ObservableValues和Lists 。然后,您可以创建一个静态(或单例)DataSourceController来提供对ObservableValue的访问,而不是传递Controllers,您只需在两个场景中使用它,它将更新另一个。取决于该方法应该对另一个场景做什么。
答案 1 :(得分:0)
好的,所以我创建了第一个窗口parentStage
然后在parentStage中显示FXML的根
Parent root;
root = loader.getRoot();
parentStage.setScene(new Scene(root));
似乎正在运作