我有一个类,其中包含将根据其修改下一个场景中的标题文本的信息。所以我需要将Object或至少一个String传递给新场景,使用它我将在初始化期间更新下一个场景中的文本。
void sceneSwitch(Event event, String fxmlName, Class child){
String fxmlPath = "gui/resources/fxml/";
Node node = (Node) event.getSource();
Stage stage = (Stage) node.getScene().getWindow();
FXMLLoader sceneLoader = fxmlLoadErrorHandler(fxmlPath + fxmlName, child); //This sets up the FXMLLoader
Parent newScene = fxmlLoadErrorHandler(sceneLoader);
/* The last line above is basically the .load() function, but this already
launches the Initialize function, in which I need to use 'session' Object
which I only yet set below via setActive */
CoreController controller = sceneLoader.getController();
controller.setActive(session);
Scene scene = null;
if(newScene != null) {
scene = new Scene(newScene);
}
stage.setScene(scene);
stage.show();
}
那么我有什么方法可以做我想要的事情吗?只需向它发送一个字符串就足够了。我想在CoreController中定义一个函数,我会在场景显示之前设置Session,但CoreController是一个抽象类,我无权修改子类中的对象。
Slaw在回答问题的评论中回答。谢谢!我觉得很尴尬,我没有想到这一点。
“您可以在抽象类中公开子类将覆盖的方法;覆盖将调用超级实现以及执行自己的操作。另一个选择是不使用fx:controller而是在加载之前调用FXMLLoader.setController。第三种选择是使用控制器工厂。“