JavaFX在控制器之间交换数据(父/子表单)

时间:2016-09-13 13:13:35

标签: javafx fxml

这种方法是否会这样做?

我尝试了很多方法,例如

  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
  4. 但这似乎非常直接且易于理解。

    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控制器中生成设置对象,并将此对象传递给父控制器。

    这有效......

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

public static settings Settings;

Main.settings.( Something)

快乐编码..