User interface JavaFX textarea不';t显示更改的值
大家好,我正在将JDK1.8与NetBeans版本8和SceneBuilder2.2一起使用。我有Main.fxml和MainController两个文件,它们有两个选项卡,底部有一个文本区域,用来打印状态信息 Login.fxml是我通过包含在scenebuilder中附加到Main.fxml第一个选项卡的选项卡。 它有自己的控制器和一个按钮,需要将信息打印到MainController的文本区域。我可以使用FXMLLoader访问TextArea并更改值,但它不会在UI中更新。假设@FXML LogID是MainController中的文本区域,这是LoginController中的代码: @FXML 专用按钮btnUser interface JavaFX textarea不';t显示更改的值,user-interface,tabs,javafx,updating,User Interface,Tabs,Javafx,Updating,大家好,我正在将JDK1.8与NetBeans版本8和SceneBuilder2.2一起使用。我有Main.fxml和MainController两个文件,它们有两个选项卡,底部有一个文本区域,用来打印状态信息 Login.fxml是我通过包含在scenebuilder中附加到Main.fxml第一个选项卡的选项卡。 它有自己的控制器和一个按钮,需要将信息打印到MainController的文本区域。我可以使用FXMLLoader访问TextArea并更改值,但它不会在UI中更新。假设@FXML
@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);
}
}
});
}
@覆盖
公共void初始化(URL、ResourceBundle rb){
btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
试一试{
FXMLLoader FXMLLoader=新的FXMLLoader();
setLocation(getClass().getResource(“Main.fxml”);
AnchorPane窗格=fxmlLoader.load();
MainController控件=(MainController)fxmlLoader.getController();
新线程(newrunnable()){
@凌驾
公开募捐{
Platform.runLater(新的Runnable(){
@凌驾
公开募捐{
control.LogID.appendText(“Hello”);
System.out.println(control.LogID.getText());
//在控制台中打印“hello”,但不在ui中打印
}
});
}
}).start();
}捕获(IOEX异常){
Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE,null,ex);
}
}
});
}
任何帮助都将不胜感激。经过大约一周的努力,我想出了一个不同的解决方案。 这将在不使用FXMLLoader()的情况下更新它 我所做的只是给Login.fxml anchorpane一个fx:id,并一直将getParent()打印到控制台,直到我获得root so。。 @FXML锚烷泛苷;//在LoginController.java中 //在platform.runLater中,我运行了底层代码 TextArea=(TextArea)paneID.getParent().getParent().getParent().lookup(“#LogID”); area.appendText(“Hello\n”) 第一个getParent是选项卡内容区域 第二个选项卡窗格
第三,主播我用一个独立的程序尝试了这个,它运行得很好!既然你说它有效,我就在我的Ubuntu笔记本电脑上重新安装了所有的东西,并再次尝试了同样的事情。当我从LoginController更改标签或文本区域中的文本时,不会显示任何内容。我可以在MainController中调用方法,除了更新UI之外,其他一切都可以正常工作。只有当我尝试从任何选项卡更新主控制器时,才可以这样做。