首页 文章

如何在javafx中传递给另一个控制器时更新对象?

提问于
浏览
0

嘿,所以我有一个用户界面,用例是点击按钮后会打开一个新窗口,其中包含传递给该窗口的对象属性的文本字段,现在用户点击新窗口中的按钮,对象属性应该更新其值在文本字段中 .

假设我们有一个窗口让我们说主窗口在点击此功能时有一个按钮此代码运行

public void openwindow(){

    FXMLLoader loader= new FXMLLoader(getClass().getResource("subWindow.fxml"));
            Stage stage=new Stage(StageStyle.DECORATED);

            stage.setScene(new Scene((Pane) loader.load()));

            ParameterssubWindowController controller=  loader.<ParameterssubWindowController>getController();

            controller.initData(A);

            stage.show();

}

这个函数打开一个子窗口并运行子窗口控制器中存在的函数initData(),为此我们传递了一个对象`A的类

public class Dog {

public double height=2;
public double weight=3;

}

子窗口包含2个文本字段,称为高度和重量,因此在打开时,两个文本字段将显示A的默认高度和权重,以便用户可以更改这些值并单击更新按钮以更新高度和重量的值 .

subWindowController

import javafx.fxml.FXML;
    import javafx.scene.control.TextField;

    /**
     *
     * @author akhil kumar
     */
    public class ParametersCatchmentController {

        @FXML
        private TextField weight;
        @FXML
        private TextField height;



        public void initData(Dog A){

            weight.setText(String.valueOf(A.weight));
            height.setText(String.valueOf(A.height));


        }


        public void update(){
           /** this function is linked to the update button upon clicking this 
               A.height=Double.parseDouble(height.getText());
               A.weight=Double.parseDouble(weight.getText());
              but since A is a local parameter of initData not able to access A in update to change the values 
           ** /
         }
    }

单击此按钮时,update()函数将链接到更新按钮

A.height=Double.parseDouble(height.getText());
           A.weight=Double.parseDouble(weight.getText());

但由于A是initData的本地参数,我无法在fucntion update()中使用它

因此在关闭子窗口时,对象A应该具有用户给出的新值,所以如果他分别给出4和5,那么A.height = 4和A.weight = 5

我该怎么做呢 ?

1 回答

  • 0

    将传递给方法的对象复制到实例字段,以便以后可以访问它:

    public class ParametersCatchmentController {
    
        @FXML
        private TextField weight;
        @FXML
        private TextField height;
    
        private Dog a ;
    
        public void initData(Dog a){
    
            weight.setText(String.valueOf(a.weight));
            height.setText(String.valueOf(a.height));
    
            this.a = a ;
        }
    
    
        public void update(){
           a.height=Double.parseDouble(height.getText());
           a.weight=Double.parseDouble(weight.getText());
        }
    }
    

相关问题