【问题标题】:How to tell IntelliJ get FXML controller from FXMLLoader for syntax hilighting?如何告诉 IntelliJ 从 FXML Loader 获取 FXML 控制器以进行语法高亮显示?
【发布时间】:2018-02-16 15:30:58
【问题描述】:

我的 JavaFX 项目遵循以下步骤: 在Model 类中计算最优值 初始化Controller 创建FXMLLoader 的新实例 设置Controllerview.fxml 渲染视图

我的 fxml 文件没有像 fx:controller="com.example.Controller" 这样的行。 IntelliJ 无法解析像 onMouseClicked="#processMyButtonClick" 这样的方法,因为它不知道要使用什么控制器。 No Controller specified for top level element。有没有办法告诉 IntelliJ。如果在 FXML 中指定了控制器,Java 会抛出 Controller value already specified 异常。

因此,源控制日志被误报“发现 100 个错误”污染,fxml 中的 #methodNamepublic void methodName(){/*..*/} 之间的链接停止工作。

有没有办法告诉 IntelliJ 从 POJO 类派生 fxml 控制器?


基于"No Controller specified for top level element" when programatically setting a Controller 可以在 fxml 文件中指定控制器,但这是不可取的,因为我想在加载 fxml 之前初始化控制器。

【问题讨论】:

  • 可能不是您想要的,但可以指定fx:controller 并在初始化控制器之前初始化控制器,然后使用controllerFactory 注入任何东西。
  • 为什么不想在 FXML 文件中包含控制器?

标签: javafx fxml fxmlloader


【解决方案1】:

我也讨厌这个很长一段时间,但我找到了解决方法。您在 FXML 文件中指定控制器,然后像这样加载它:

public static Node loadScene(Controller c) {
    URL resource = Controller.class.getResource("/scene.fxml");
    FXMLLoader loader = new FXMLLoader(resource);
    loader.setControllerFactory(param -> c);
    loader.load();
    return loader.getRoot();
}

【讨论】:

  • 微创手术。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2013-07-22
  • 2014-02-25
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多