【问题标题】:Multiple controller for one FXML file一个 FXML 文件的多个控制器
【发布时间】:2013-05-28 14:32:00
【问题描述】:

我有一个由一个控制器控制的 fxml 文件。我想将控制器分成多个部分,就像放在一个控制器中一样会产生很长的代码。不幸的是,fx:controller 只能放在根目录下。对我如何分离控制器有什么建议吗?

【问题讨论】:

    标签: java javafx-2 javafx fxml


    【解决方案1】:

    在加载 FXML 标记期间,仅规定为场景图指定一个控制器。您可以加载其他 FXML 标记文件和嵌套控制器,但我认为这不是您要的。

    在我看来,这并不重要。

    您可以在任意数量的文件中编写任意数量的类,并让它们与您的控制器类交互,就像任何 Java 类可以与任何其他 Java 类交互一样。

    我真的想不出任何特别好的理由说明在加载时为场景图指定多个控制器会很有用。

    【讨论】:

      【解决方案2】:

      我建议创建自定义控件 - 使用几个较小的 FXML 文件而不是一个大 FXML 文件。

      教程如下:

      http://docs.oracle.com/javafx/2/fxml_get_started/custom_control.htm

      【讨论】:

      • @Puce 如果我选择这种自定义控制方法,我仍然可以将场景构建器与我的 fxml 文件一起使用吗?当我从场景构建器中保存它时,它会一遍又一遍地覆盖我的自定义 fxml 设置吗?
      • @TomasBisciak 是的,SceneBuilder 支持 fx:root 构造。它的行为方式应该与非 fx:root FXML 文件相同。
      【解决方案3】:

      您可以将 fxml 文件作为节点添加到另一个 fxml 中,两者都具有不同的控制器和场景构建器中的包含选项

      【讨论】:

        【解决方案4】:

        通过这种方式,您可以制作同一个 FXML 文件的另一个控制器:

        MyClass object= new MyClass();
        FXMLLoader  root = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        root.setController(object);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-03
          • 2017-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多