#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 была область содержимого вкладки
вторая панель вкладок
третья основная панель привязки