这种方法是否会这样做?
我尝试了很多方法,例如
但这似乎非常直接且易于理解。
public class ParentController {
private Settings settings;
public void setSettings(Settings settings) {
this.settings = settings;
System.out.println(this.settings.toString());
}
@FXML
private Button open;
@FXML
private void pass() throws IOException {
Stage st = new Stage();
FXMLLoader loader = new FXMLLoader(getClass().getResource("Child.fxml"));
Region root = (Region) loader.load();
Scene scene = new Scene(root);
st.setScene(scene);
ChildController controller = loader.<ChildController>getController();
controller.initialize(this);
st.show();
}
}
public class ChildController {
@FXML
private TextField number; // some settings
@FXML
private Button ok;
private ParentController parentController ;
@FXML
public void pass() {
Stage stage = (Stage) ok.getScene().getWindow();
parentController.setSettings(setSettings());
stage.close();
}
private Settings setSettings(){
return new Settings(Integer.valueOf(this.number.getText()));
}
public void initialize(ParentController parentController) {
this.parentController = parentController;
}
}
这样我就可以在Child控制器中生成设置对象,并将此对象传递给父控制器。
这有效......
这种方法是否合适?如果没有,可能意味着什么陷阱?
答案 0 :(得分:0)
对于这个论坛,这个问题可能过于基于意见了。您获得的简单性(与JavaFX pass values from child to parent相比)的权衡取舍是您将孩子与父母紧密耦合:换句话说,您无法使用子视图/控制器您没有特定父母的任何背景。在链接方法中,子视图/控制器不依赖于父视图。这是否可取/有益/值得增加的复杂性将取决于您的确切用例。
答案 1 :(得分:0)
我认为这是合适的。对我来说,这只是一种编码风格。
但在我看来,将您的设置变量更改为公共静态,存储在Main类中并在Main类中初始化,以便可在所有控制器或其他类中访问。这就是我的风格:D
public static settings Settings;
Main.settings.( Something)
快乐编码..