JavaFX-setText()不起作用

JavaFX-setText()不起作用,java,javafx,fxml,Java,Javafx,Fxml,我无法设置文本字段的文本。没有错误,但文本字段仍然为空。 程序的其余部分正在工作,方法被调用,System.out.println(…)打印正确的文本。 所以问题是,文本字段的文本无法设置。即使我只写textField.setText(“0”);文本字段仍然为空。 当我在public void initialize(…)下设置textfield的文本时,它也可以工作。那么为什么它在setCurrentInfo中不起作用呢 @FXML private TextField textField; p

我无法设置文本字段的文本。没有错误,但文本字段仍然为空。 程序的其余部分正在工作,方法被调用,System.out.println(…)打印正确的文本。 所以问题是,文本字段的文本无法设置。即使我只写textField.setText(“0”);文本字段仍然为空。 当我在public void initialize(…)下设置textfield的文本时,它也可以工作。那么为什么它在setCurrentInfo中不起作用呢

@FXML
private TextField textField;

private Info currentInfo;

 @Override
public void initialize(URL url, ResourceBundle rb) {
}   

public void setCurrentInfo(Info currentInfo) {
    textField.setText(currentInfo.getpw1());
    System.out.println(currentInfo.getpw1());
    this.currentInfo = currentInfo;
}
控制器中调用setCurrentInfo的部分:

@FXML
private void handleBtn1(ActionEvent event) throws Exception{
    Info info = new Info(textFieldA.getText(), textFieldB.getText());
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("FXMLPassword.fxml"));
    loader.load();
    Stage stage; 
    Parent root;
    if(event.getSource()==btn1){
        //get reference to the button's stage         
        stage=(Stage) btn1.getScene().getWindow();
        //load up OTHER FXML document
        root = FXMLLoader.load(getClass().getResource("FXMLPassword.fxml"));
    }
    else{
        stage=(Stage) btn1.getScene().getWindow();
        root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    }
    //create a new scene with root and set the stage
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
    FXMLPasswordController passwordController = loader.getController();
    passwordController.setCurrentInfo(info);
    }

您正在从错误的
FXMLLoader
检索控制器。特别是,你要:

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("FXMLPassword.fxml"));
loader.load();
后来

FXMLPasswordController passwordController = loader.getController();
在这段代码中,您创建了一个
fxmloader
,并将其指向
FXMLPassword.fxml
文件。但是,当调用读取fxml文件并创建其中定义的UI的
loader.load()
时,对结果不做任何处理。因此,通过调用
loader.load()
创建的UI永远不会显示

因此,当您从该
加载程序
获取控制器并使用它对UI进行更改时,您将永远看不到这些更改,因为
文本字段
的实例不会显示

调用时会创建显示的
TextField

root = FXMLLoader.load(getClass().getResource("FXMLPassword.fxml"));
但是,由于您在这里使用的是
fxmloader.load(…)
方法的静态版本,因此您没有机会获取与之关联的控制器

您需要按如下方式重构代码:

@FXML
private void handleBtn1(ActionEvent event) throws Exception{
    Info info = new Info(textFieldA.getText(), textFieldB.getText());
    Stage stage; 
    Parent root;
    if(event.getSource()==btn1){
        //get reference to the button's stage         
        stage=(Stage) btn1.getScene().getWindow();
        //load up OTHER FXML document
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("FXMLPassword.fxml"));
        root = loader.load();
        FXMLPasswordController passwordController = loader.getController();
        passwordController.setCurrentInfo(info);
    }
    else{
        stage=(Stage) btn1.getScene().getWindow();
        root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    }
    //create a new scene with root and set the stage
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}

您在哪里呼叫
setCurrentInfo(…)
?你能在问题中包含你调用它的代码吗?来自另一个控制器。但是它的确切名称是,否则Println将无法打印正确的文本。您是在由
fxmloader
创建的此控制器的实例上调用它吗?如果你能回答这个问题并包含调用这个方法的代码,包括你如何获得控制器的引用,这将非常有助于诊断问题。是的,谢谢。见答案。