Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface JavaFX textarea不';t显示更改的值_User Interface_Tabs_Javafx_Updating - Fatal编程技术网

User interface JavaFX textarea不';t显示更改的值

User 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

大家好,我正在将JDK1.8与NetBeans版本8和SceneBuilder2.2一起使用。我有Main.fxml和MainController两个文件,它们有两个选项卡,底部有一个文本区域,用来打印状态信息

Login.fxml是我通过包含在scenebuilder中附加到Main.fxml第一个选项卡的选项卡。 它有自己的控制器和一个按钮,需要将信息打印到MainController的文本区域。我可以使用FXMLLoader访问TextArea并更改值,但它不会在UI中更新。假设@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);
            }
        }
    });
}   
@覆盖
公共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之外,其他一切都可以正常工作。只有当我尝试从任何选项卡更新主控制器时,才可以这样做。