当前位置: 首页 > 知识库问答 >
问题:

无法从javafx中的其他控制器更新场景

杨飞
2023-03-14

我是Javafx的新手,我有一个menuBar和多个场景,我可以使用MenuBar在它们之间切换,所有工作都很好,直到我尝试在单击菜单项时做一些事情而不是显示场景。

我试图通过使用方法reload(),在textfieldnom中显示一些文字 homeController类中调用Enfantcontroller,在那里我有菜单项action methods,我调用reload()在单击菜单项时将文本写入enfantView方法中的文本字段,但在加载该场景的控制器后,什么都没有发生。这是我的代码:

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

}

家庭控制器类

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

    }
}

我知道我可能忽略了一些东西,但我不知道它是什么,帮助将不胜感激。

共有1个答案

郜卓君
2023-03-14

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

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

 类似资料:
  • 我正在设计一款跳棋游戏,一旦游戏结束,一个新窗口就会打开,你可以开始一个新游戏,也可以退出。我对JavaFX了解不多,我一直在努力让我的代码正常工作,但我没有成功。。。 我有一个困难,我的电路板没有显示为fxml文件,但它是用Java代码创建的,并放在我的边框窗格的中心。边框窗格的顶部是fxml文件。然后,游戏结束后的另一个窗口也是另一个fxml文件: 这个fxml文件的Controller类如下

  • 我想从我用FXMLoader加载的场景中获取控制器。用例是: > 我的 JSON 管理器收到一个 JSON 对象 我启动的任务显示一个新的场景 在那之后,我有空旷的场景。 现在我这样做来填充组件 我的问题是,有没有更简单的方法来做到这一点?我有一个在 FXML 中指定的控制器 我想获得具有绑定值的实例(在本例中称为name的TextField) 提前谢谢

  • null 我在TopMenuButtons中有一个按钮,它具有openAssisstantStage()方法,打开新的小阶段: 对于这个阶段,我还有FXML文件和控制器(AssisstantController)。只有2个按钮-第一个按钮应该打开前一个阶段和关闭电流,但第二个按钮也应该打开普雷沃阶段,关闭电流,也打开一个特定的标签在我的标签视图和做一些其他逻辑例如。获取实际localDate: 我

  • 我正在做一个项目,处理多个fxml和相应的控制器文件。我需要以某种方式从b.fxml的控制器访问定义在例如a.fxml中的fxml元素并使用它。 我不允许展示实际代码。但是,为此目的,我构建了一个简单的应用程序,其中包含两个FXML及其相应的控制器。 此应用程序具有带有ButtonController.java的Button.fxml和带有ProgressIndicator.fxml的Progre

  • 目标是打印标签的当前文本。标签在整个程序中不断变化,使用当前的方法,我只能检索标签的初始化值。 我用来检索控制器实例的内容:

  • 我是JavaFX的新手。我试图编程一个简单的图形用户界面,但我面临着那些可能相关的问题。我用文件选择器设置文件,并想做相当基本的操作: 保存最后使用的文件夹 在VBox中写入选中文件的名称 这是我的代码(编译): 我无法刷新节点以设置当前初始目录或在VBox上显示collecName。我试图通过重新加载对象或调整窗口大小来重新生成它们,但没有任何效果。当我在控制台上打印变量时,我看到它们发生了变化