JavaFX label.getText () ничего не возвращает - PullRequest
0 голосов
/ 29 марта 2019

У меня есть проект, в котором у меня есть два разных контроллера 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 Ответ

3 голосов
/ 29 марта 2019

Вы устанавливаете имя пользователя после , метод initialize() выполняется при загрузке документа FXML. Поэтому, когда вы звоните 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));

Некоторые предположения сделаны, поскольку ваши примеры кода не полны, но это должно привести вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...