无法在javafx中更新来自其他控制器的场景

时间:2017-09-23 09:58:04

标签: java javafx

我是Javafx的新手,我有一个menuBar和多个场景,我可以使用MenuBar在它们之间切换,一切正常,直到我尝试做某事单击除显示场景以外的菜单项。

我试图通过使用我试图展示的场景的nom方法在文本字段reload();中显示一些文字,我称之为{{1}来自我的Enfantcontroller类,其中我有菜单项操作方法,当我单击菜单项时,我调用homeController将文本写入reload()方法中的文本字段,但之后没有任何反应我为该场景加载控制器。这是我的代码:

EnfantController类

enfantView

homeController类

    public class EnfantController implements Initializable {  

        @FXML
        private TextField nom;


        /**
         * Initializes the controller class.
         */
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            // TODO

        }
        public void reload() {
               this.nom.setText("vndghj");    
        }

}

我知道我可能会在这里忽略一些东西,但我无法弄清楚它是什么,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

您使用initialize方法加载fxml。

enfantItemAction中,您再次加载fxml并使用创建的控制器,但您显示的是使用initialize方法创建的节点。

您需要使用在加载显示的fxml时创建的控制器,例如

@FXML
public void enfantItemAction() throws IOException {
    // getting the controller class and execute the reload method

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("/Views/Enfant.fxml"));
    Node node = loader.load();

    EnfantController enfantController = loader.getController();
    enfantController.reload();
    borderPane.setCenter(node);
}

或者,您也可以存储在字段中的initialize方法中加载fxml文件时创建的控制器,而不是在enfantItemAction方法中再次加载fxml。