繁体   English   中英

无法从Javafx中的另一个控制器更新场景

[英]Can Not update scene from another controller in javafx

我是Javafx ,我有一个menuBar和多个场景,可以使用MenuBar在它们之间进行切换,所有这些都可以正常工作,直到我尝试单击菜单项(而不是显示场景)时执行某些操作为止。

我试图通过使用reload();方法来显示一些文本字段nom的文字reload(); 我要显示的场景中,我从homeController类中调用了Enfantcontroller ,在其中我有菜单项的操作方法,当我单击菜单项时,我调用了reload()将文本enfantView方法中的文本字段中但是在为该场景加载控制器后什么也没有发生。 这是我的代码:

EnfantController类

    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");    
        }

}

homeController类

public class CrechHomeController implements Initializable {

    /**
     * Initializes the controller class.
     */
    @FXML
    private BorderPane borderPane;

    private AnchorPane enfant;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        try {
            // TODO
            enfant = FXMLLoader.load(getClass().getResource(("/Views/Enfant.fxml")));


        } catch (IOException ex) {
            Logger.getLogger(CrechHomeController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @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"));
        loader.load();

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

    }
}

我知道我可能会在这里忽略某些东西,但是我不知道这是什么,我们将不胜感激。

您将fxml加载到initialize方法中。

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方法中再次加载enfantItemAction

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM