【问题标题】:Calling initialize() method externally in fxml controller rather than automatically在 fxml 控制器外部而不是自动调用 initialize() 方法
【发布时间】:2017-04-07 13:25:44
【问题描述】:

我有 6 个具有一个控制器的 fxml 文件。我需要的不是第一个 fxml 而是第 5 个 fxml 文件(PasswordArray.fxml)的初始化方法来自定义按钮。由于在加载第一个 fxml 文件(Home.fxml) 时会自动调用 initialize() 方法,因此会显示错误。如何在 PasswordArray.fxml 之后使用现在的初始化方法。 我在互联网上搜索,但没有找到我的问题的任何解决方案。我应该使用不同的控制器吗,因为我需要多个 fxml 文件的初始化方法。Main FXML File (Home.fxml)

Controller (MajorProjectController.java) [initialize()方法][3]

【问题讨论】:

  • “我有 6 个具有一个控制器的 fxml 文件”。第一:你没有。每次加载 FXML 文件时都会获得一个新控制器。您的意思可能是“我有 6 个 fxml 文件,所有这些文件的控制器都来自同一个类”。只是不要这样做。为每个 FXML 创建一个不同的控制器类。
  • 感谢#James_D 的建议。但是我有一个查询“我不需要对所有 fxml 文件进行其他自定义操作,但只是一些文件需要初始化方法来在 GUI 上执行一些额外的操作。所以我应该为我的所有 fxml 文件使用不同的控制器还是仅仅那些需要初始化方法来执行一些自定义的文件?"
  • 您基本上应该从不对不同的 FXML 文件使用相同的控制器类。唯一可能的例外(我能想到的)是,如果您有两个 FXML 文件,它们具有完全相同相同的控件集,但它们的布局不同(例如,如果您正在为桌面版和移动版都具有不同的布局:但无论如何,由于各种原因,您不太可能使其工作)。
  • 好的,但是我们怎样才能多做一个控制器呢?由于我是 javafx 和 fxml 的新手,我所知道的是“当我们在 netbeans 中创建新的 'JavaFX FXML Application' 时,它会自动创建一个控制器 java 文件。”我现在如何创建一个新的控制器文件?
  • 新建一个类。我真的不明白你在问什么。

标签: controller javafx-8 fxml fxmlloader


【解决方案1】:

您可以检查初始化方法的 URL 位置参数中的文件名并相应地触发您的操作。请注意,FXMLLoader 将为每个单独的 FXML 创建一个单独的控制器类实例 - 除非您手动向 FXMLLoader 实例提供您自己的实例。

【讨论】:

  • 但我使用的是没有参数的 initialize() 方法。因为当我将它与参数一起使用时,我无法从不同的 @FXML 注释方法调用它。我现在该怎么办?
  • @MohitaSrivastava 如果您从控制器中的其他方法调用initialize(),那么您基本上做错了。 initialize() 方法用于初始化,即每个控制器实例只能调用一次。
  • 对于使用无参数initialize 方法,您仍然可以添加一个名为location 的字段,使其对FXMLLoader 可见,FXMLLoader 将向该字段注入位置 url .请注意,我会考虑检查 initialize 方法中的位置错误,因为 url 不会很明显,并且 fxml 文件可能会被重命名以破坏代码...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多