大家好,我使用jdk 1.8和NetBeans版本8以及SceneBuilder 2.2。我有Main.fxml和MainController文件,底部有2个标签和一个TextArea,可以打印出状态信息。
Login.fxml是一个标签,我通过include在scenebuilder中附加到Main.fxml第一个标签。 它有自己的控制器和一个按钮,需要将信息打印到MainController中的TextArea。我可以使用FXMLLoader访问TextArea并更改值,但它不会在UI中更新。让我们说@FXML LogID是MainController中的TextArea,这是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);
}
}
});
}
任何帮助将不胜感激。
答案 0 :(得分:0)
经过大约一周的尝试,我可以想出一个不同的解决方案。 这将在不使用FXMLLoader();
的情况下更新它我所做的就是给Login.fxml一个bootpane一个fx:id并保持打印getParent()到控制台直到我得到root所以.. @FXML AnchorPane paneID; //在LoginController.java中
//在platform.runLater中我运行了底部代码
TextArea area =(TextArea)paneID.getParent()。getParent()。getParent()。lookup(“#LogID”); area.appendText( “你好\ n”);
首先,getParent是标签内容区域
第二个tabpane
主要的锚板