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

javafx-在控制器内部加载FXML文件,还可以使用NetBeans的“make Controller”

毕泽宇
2023-03-14

在尝试加载FXML文件时,通常会执行以下操作:

FXMLLoader loader = FXMLLoader.load(getClass().getResource("File.fxml"));
Region root = loader.load();
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.show();
public Controller()
{
   FXMLLoader loader = new FXMLLoader(getClass().getResource(fxml));
   loader.setController(this);
   Parent root = loader.load();
   Stage stage = new Stage();
   stage.setScene(new Scene(root));
   stage.show();
}
fx:controller="package.Class"
fxmlloader.setController(this);

这是可能的,还是我需要某种类型的包装类来创建FXML窗口?

提前道谢。

共有1个答案

贝成业
2023-03-14

您可以这样做:

public Controller()
{
   FXMLLoader loader = new FXMLLoader(getClass().getResource(fxml));
   loader.setControllerFactory(type -> {
       if (type == Controller.class) {
           return this ;
       } else {
           try {
               return type.newInstance();
           } catch (RuntimeException e) {
               throw e ;
           } catch (Exception e) {
               throw new RuntimeException(e);
           }
       }
   });
   Parent root = loader.load();
   Stage stage = new Stage();
   stage.setScene(new Scene(root));
   stage.show();
}

这将允许您(实际上您需要)在FXML文件中拥有fx:controller属性。基本上,这是指定一个函数,FXMLLoader可以使用该函数从指定的类获取控制器实例。在这种情况下,如果FXML加载器正在查找controller类的对象,则返回当前对象,否则只是创建指定类的新对象。

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

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

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

  • 问题内容: 我试图在JavaFX中获得TableView来动态显示内容。 当我运行程序时,出现此错误: 我的控制器名为“ UserInterfaceController.java”,它与FXML文件位于同一软件包下,我也已将该软件包导入了FXML中。为什么找不到控制器? FXML文件: 控制器: 主类: 问题答案: 使用FXML的全限定名来引用您的控制器: 后续问题的答案 对以下问题的回答解释了为

  • 我试图在JavaFX中获得一个TableView来动态显示内容。 当我运行程序时,出现以下错误: 我的控制器名为“UserInterfaceController.java”,它与FXML文件在同一个包下,我也在FXML中导入了包。为什么找不到控制器? FXML文件: 控制器: 主要类: