JavaFX label.getText()不返回任何内容

时间:2019-03-29 01:56:56

标签: database sqlite javafx controller

我有一个项目,其中有两个不同的控制器adminUserList和editStaffController,adminUserStaff将字符串传递给editStaffController。

public void openStaffEdit(ActionEvent actionEvent, String form, boolean cW){

        try {

            FXMLLoader loader = new FXMLLoader(getClass().getResource("/home/editStaff.fxml"));

            Parent root = (Parent) loader.load();

            editStaffController eS = loader.getController();
            eS.setUsername(itemname);


            Stage stage = new Stage();
            stage.setScene(new Scene(root));
            stage.show();



            stage.show();
            // Hide this current window (if this is what you want)

            if(cW == true){
                ((Node)(actionEvent.getSource())).getScene().getWindow().hide();
            }

        }
        catch (IOException e) {
            e.printStackTrace();
        }


    }

,当它接收到字符串时,将其设置在标签和字段中

 public void setUsername(String editUsername){
        username_lb.setText(editUsername);
        username_field.setText(editUsername);
    }

,当我运行它时它会正确显示在程序中。

但是,当我尝试在初始化中获取数据时,即使程序在字段中显示它,也很难返回空值。

@Override
    public void initialize(URL location, ResourceBundle resources) {
        position_Box.getItems().addAll("Franchise", "Receptionist" , "Mechanic", "Foreperson");
        info_txt.setVisible(false);

        System.out.println(username_field.getText());
        setFields();
    }

是否可以解决此问题?是否有更好的方法将数据从adminUserListController传递到editStaffController并将其保存在变量中?

先谢谢了。如果您对代码有任何疑问,请随时提问。

1 个答案:

答案 0 :(得分:3)

要在加载FXML文档时执行initialize()方法之后,在 之后设置用户名。因此,当您致电username_field.getText()时,它为空为空。

请记住,当界面显示在屏幕上时,控制器的构造函数和initialize()方法已经完全完成运行。


您发布的代码没有包含足够的信息来了解您要完成的任务,但是通常不应尝试从initialize()方法内的节点检索数据。如果您需要访问initialize()方法中的用户名,请在控制器中声明一个类字段,该字段可由构造函数设置:

private String username;

public YourController(String username) {
    this.username = username;
}

现在,您只需要在Java代码而不是FXML文档中声明控制程序,并将用户名作为参数传递即可:

FXMLLoader loader = new FXMLLoader(getClass().getResource("/home/editStaff.fxml"));
loader.setController(new YourController(username));

由于您的代码示例不完整,因此做出了一些假设,但这应该引导您朝着正确的方向前进。