Текстовая область JavaFX не отображает измененное значение

#user-interface #tabs #javafx #updating

#пользовательский интерфейс #вкладки #javafx #обновление

Вопрос:

Привет, ребята, я использую jdk 1.8 с NetBeans версии 8 и SceneBuilder 2.2. У меня есть файлы Main.fxml и MainController, которые имеют 2 вкладки и текстовую область внизу, которая должна распечатывать информацию о состоянии.

Login.fxml — это вкладка, которую я прикрепил к первой вкладке Main.fxml через включение в scenebuilder. У него есть свои собственные контроллеры и кнопка, которые должны печатать информацию в текстовой области в MainController. Я могу получить доступ к текстовой области с помощью FXMLLoader и изменить значение, но оно не обновляется в пользовательском интерфейсе. Допустим, @FXML LogID — это текстовая область в MainController, а это код в LoginController:

@FXML приватная кнопка btn;

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

    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            try {
                FXMLLoader fxmlLoader = new FXMLLoader();
                fxmlLoader.setLocation(getClass().getResource("Main.fxml"));
                AnchorPane pane = fxmlLoader.load();
                MainController control = (MainController) fxmlLoader.getController();

                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        Platform.runLater(new Runnable() {

                            @Override
                            public void run() {
                                control.LogID.appendText("Hello");
                                System.out.println(control.LogID.getText()); 
                                //prints "hello" in console but not the ui
                            }
                        });
                    }
                }).start();
            } catch (IOException ex) {
                Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
}   
 

Любая помощь будет оценена.

Комментарии:

1. Я попробовал это с помощью автономной программы, и она работает просто отлично!

2. Поскольку вы сказали, что это сработало, я переустановил все на свой ноутбук Ubuntu, попробовал снова и то же самое. При изменении текста в метках или текстовых областях из LoginController ничего не отображается. Я могу вызывать методы в MainController, и все работает, кроме обновления пользовательского интерфейса. И это только в том случае, если я попытаюсь обновить MainController с любой из моих вкладок.

Ответ №1:

Примерно через неделю, попробовав все, что я могу, я придумал другое решение. Это обновит его без использования FXMLLoader();

Все, что я сделал, это дал Login.fxml anchorpane fx:id и продолжал печатать getParent() на консоль, пока не получил root so .. @FXML AnchorPane paneID; // В LoginController.java

//В platform.runLater я запустил нижний код

Область текстовой области = (Текстовая область) paneID.getParent().getParent().getParent().lookup(«#LogID»); area.AppendText(«Привет n»);

первым параметром getParent была область содержимого вкладки

вторая панель вкладок

третья основная панель привязки