【问题标题】:JavaFX exchange data between controllers (parent/child forms)JavaFX 在控制器之间交换数据(父/子表单)
【发布时间】:2016-09-14 22:54:24
【问题描述】:

这种做法是不是很笨拙?

我尝试了很多方法,例如

  1. How can I exchange data between forms
  2. JavaFX pass values from child to parent
  3. JavaFX 2.2 -fx:include - how to access parent controller from child controller

但这似乎是相当直接和可以理解的。

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;
    }
}

通过这种方式,我得到了在子控制器中生成的设置对象并将这个对象传递给父控制器。

这行得通...

这种方法合适吗?如果不是,可能意味着什么陷阱?

【问题讨论】:

    标签: javafx fxml


    【解决方案1】:

    对于这个论坛来说,这个问题可能过于基于意见。您获得的简单性(与JavaFX pass values from child to parent 相比)的权衡是您已将子级与父级紧密耦合:换句话说,您不能在任何上下文中使用子视图/控制器没有那个特定的父母。在链接方法中,子视图/控制器不依赖于父视图。这是否可取/有益/是否值得增加复杂性将取决于您的确切用例。

    【讨论】:

      【解决方案2】:

      我认为这是合适的。对我来说,这只是一种编码风格。

      但在我看来,将您的设置变量更改为公共静态,存储在 Main 类中并在 Main 类中初始化,以便在所有控制器或其他类中访问。这就是我的风格:D

      public static settings Settings;
      
      Main.settings.( Something)
      

      编码愉快..

      【讨论】:

        猜你喜欢
        • 2020-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 2018-07-24
        • 2019-04-10
        • 1970-01-01
        相关资源
        最近更新 更多