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

JavaFX在父控制器内部加载FXML

仲柏
2023-03-14

更新

我试过很多解决办法,但都没有达到我的目标。应用程序加载UsersMainPageController,它只包含一个AnchorPane(类似于父控件),因此这是相关代码:

[UsersMainPageController]

public class UsersMainPageController implements Initializable {

    private PostOffice application;

    @FXML
    private AnchorPane ParentControl;

    public void setApp(PostOffice application){
        this.application = application;
    } 

    public void loadPage(String pageName) {
        try {                    
            URL url = getClass().getResource(pageName);
            FXMLLoader fxmlLoader = new FXMLLoader();
            fxmlLoader.setLocation(url);
            fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
            AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream()); 

            ParentControl.getChildren().clear();///name of pane where you want to put the fxml.
            ParentControl.getChildren().add(page);

        } 
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void loadManageUsers () {
        loadPage("UsersManage.fxml");
    }

    public void loadListUsers () {
        loadPage("UsersList.fxml");
    }

    /**
     * Initializes the controller class.
     */

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        loadListUsers();
    }

}
public class UsersListController implements Initializable {
    private UsersMainPageController mainController;

    @FXML
    private void handleButtonEditAction(ActionEvent event) throws IOException {
        mainController.loadManageUsers();
    }
}
public class UsersManageController implements Initializable {
    private UsersMainPageController mainController;

    @FXML
    private void handleButtonBackAction(ActionEvent event) throws IOException {
    mainController.loadListUsers();
    }
}
Caused by: java.lang.NullPointerException
    at postoffice.multiuser.UsersListController.handleButtonAggiornaAction(UsersListController.java:210)
    ... 50 more

共有1个答案

龙俊美
2023-03-14

您可以将子fxml添加到父控制器中。

1.首先,只需使用一个锚窗格,并将它的界限设置在您想要放置FXML代码的地方。

现在试试这个...

 button.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent t) {
                openNewWindow("Example.fxml");
        }
    });
public void openNewWindow(String FXMLFile)
 {
     //ChildNode child;
    try {                    
        URL url = getClass().getResource(FXMLFile);
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(url);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream()); 

        anchor.getChildren().clear();///name of pane where you want to put the fxml.
        anchor.getChildren().add(page);
    } 
    catch (IOException e) {
        e.printStackTrace();
    }
 }
 类似资料:
  • 在尝试加载FXML文件时,通常会执行以下操作: 这是可能的,还是我需要某种类型的包装类来创建FXML窗口? 提前道谢。

  • 在我的程序中,我有一个选项卡窗格,每个选项卡都有自己的FXML文件和控制器。我已经为选项卡2(Schedular)加载了FXML文件。我试图从父控制器(FXML文档)调用子控制器(调度程序)中的函数。当我使用FXML Loader加载控制器时,它返回null。我该如何解决这个问题。 这是我的主要代码: 主要FXML文档:

  • 我试图在JavaFX中从一个控制器调用另一个控制器。我在我的代码的另一部分中以几乎完全相同的方式完成了这项工作,并且它起了作用,但出于某种原因,它在这里不起作用。 我正在获取FXML资源并加载它,但是当我调用能力信息ontroller.set能力名称文本(能力名称);它给我以下错误说能力信息控制器是NULL:

  • 但是,我得到一个NullpointerException,所以我假设它仍然找不到控件。 有人知道如何访问父控制器中加载的FXML元素吗?

  • 问题内容: 我有一个控制器,该控制器的操作可以显示一组特色产品。但是,产品是通过包含专有模型和视图的控制器进行管理的。 如何从控制器中的操作中访问信息?实例化无法运行,因为该类未在运行时加载,并且CodeIgniter也未提供动态加载控制器的方法。将类放入库文件中实际上也不起作用。 确切地说,我需要在索引视图中插入产品视图(填充有控制器处理的数据)。我正在运行CodeIgniter 2.0.2。

  • 在尝试加载FXML文件时,通常执行如下操作: 这可能吗?或者我需要某种能够创建FXML窗口的包装类吗? 提前谢了。