大家好,我正在使用带有NetBeans版本8和SceneBuilder 2.2的jdk 1.8 . 我有Main.fxml和MainController文件,底部有2个标签和一个TextArea,可以打印出状态信息 .
Login.fxml是一个标签,我通过include在scenebuilder中附加到Main.fxml的第一个标签 . 它有自己的控制器和一个按钮,需要将信息打印到MainController中的TextArea . 我可以使用FXMLLoader访问TextArea并更改值,但它不会在UI中更新 . 假设@FXML LogID是MainController中的TextArea,这是LoginController中的代码:
@FXML private Button 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 回答
经过大约一周的尝试,我可以想出一个不同的解决方案 . 这将在不使用FXMLLoader()的情况下更新它;
我所做的只是给Login.fxml anchorpane一个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
第三个主要的锚板