JavaFX 在没有控制器的 fxml 中包含 fxml

2023-11-21

我正在使用 javafx 编写一个应用程序。 这是一个“多屏”应用程序,带有一个主菜单,我可以在其中切换场景。

我的场景在不同的 fxml 文件中定义。

因为我尝试使用 mvc 模式,所以我没有在 fxml 文件中设置控制器,而是在 FXMLloader 上使用 setController。

一切工作正常,但我在单独的控制器和单独的 fxml 文件中拥有主菜单及其 onActions 的所有功能。

我试过了

<fx:include source="Menubar.fxml"/>

并为 fxml 文件创建了一个控制器,当我在 fxml 文件中设置控制器时,我无法编译源代码。如何为包含的 fxml 文件设置控制器?

startpage.fxml 获取其控制器“Startpage”

FXMLLoader loader = new FXMLLoader(getClass().getResource("../fxml/startpage.fxml"));
        loader.setController(new Startpage(m));
        Pane mainPane = loader.load();

startpage.fxml包括menubar.fxml,现在如何为菜单栏控件设置控制器?或者如何轻松地将菜单栏控制器包含在每个其他控制器中?


我认为你需要使用controllerFactory在加载器中实现你想要的。当您使用controllerFactory,您在 FXML 文件中指定控制器的类名,但控制器工厂允许您控制如何将其映射到对象(因此您仍然可以通过模型等来构造它)。当您指定一个controllerFactory for an FXMLLoader,该工厂还用于为任何<fx:include>FXML 文件中的内容。

最后,请注意,您可以将所包含的 fxml 文件的控制器注入到“主”fxml 文件中,如FXML 文档的“嵌套控制器”部分.

因此,如果 startpage.fxml 如下所示:

<!-- imports etc -->
<BorderPane fx:controller="com.example.Startpage" ... >
  <top>
    <fx:include source="Menubar.fxml" fx:id="menubar" />
  </top>
  <!-- etc ... -->
</BorderPane>

和 Menubar.fxml 看起来像

<!-- imports etc -->
<MenuBar fx:controller="com.example.MenubarController" ... >
  <!-- etc... -->
</MenuBar>

然后您可以通过以下方式控制控制器类的实例化:

FXMLLoader loader = new FXMLLoader(getClass().getResource("../fxml/startpage.fxml"));

Model m = ... ;

Startpage startpageController = new Startpage(m);
MenubarController menubarController = new MenubarController(m);

Callback<Class<?>, Object> controllerFactory = type -> {
    if (type == Startpage.class) {
        return startpageController ;
    } else if (type == MenubarController.class) {
        return menubarController ;
    } else { 
        // default behavior for controllerFactory:
        try {
            return type.newInstance();
        } catch (Exception exc) {
            exc.printStackTrace();
            throw new RuntimeException(exc); // fatal, just bail...
        }
    }
};

loader.setControllerFactory(controllerFactory);

Pane mainPane = loader.load();

现在,如果需要,您实际上可以在应用程序代码中引用两个控制器,但您也可以这样做

public class Startpage {

    public final Model m ;

    // note the name of this field must be xController,
    // where x is the fx:id set on the <fx:include>:

    @FXML
    private final MenubarController menubarController ;

    public Startpage(Model m) {
        this.m = m ;
    }

    // ...
}

所以主控制器现在有了对菜单栏控制器的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 在没有控制器的 fxml 中包含 fxml 的相关文章

  • JavaFX 中的 fx:id 和 id: 有什么区别?

    也许是一个真正的新手的问题 我开始通过阅读以下教程在 FMXL 应用程序中使用场景生成器学习 JavaFX http docs oracle com javase 8 javafx get started tutorial fxml tut
  • JavaFX:将像素写入 PixelWriter 的最快方法

    我正在寻找最快的方式来写入像素javafx scene image Image 写信给BufferedImage的后备数组要快得多 至少在我制作的测试图像上 只花了大约 20 毫秒BufferedImage WritableImage另一方
  • 来自控制器的 Rails 验证

    有一个联系页面 可以输入姓名 电话 电子邮件和消息 然后发送到管理员的电子邮件 没有理由将消息存储在数据库中 问题 如何 在控制器中使用 Rails 验证 根本不使用模型 或者 在模型中使用验证 但没有任何数据库关系 UPD Model c
  • Java 和 GUI - 根据 MVC 模式,ActionListener 属于哪里?

    我目前正在编写一个模板 Java 应用程序 不知何故 如果我想完全遵循 MVC 模式 我不确定 ActionListener 属于哪里 该示例基于 Swing 但它不是关于框架 而是关于 Java 中 MVC 的基本概念 使用任何框架创建
  • 设置 MVC 下拉列表中日期的格式

    我的页面上有一个下拉列表 如下所示 Html DropDownList dd dates new SelectList Model seasonDates Please Select 其中 seasonDates 是日期的 IList 问题
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 如何在asp.net mvc中创建弹出窗口?

    无需使用 javascript AJAX 单击超链接时 应该打开一个新的浏览器窗口 基本 HTML 锚元素 a href http www w3schools com target blank Visit W3Schools a ASP N
  • ListChangeListener wasPermutated 块

    ListChangeListener 的 JavaDoc 提供了用于处理更改的模板 但是 我不知道如何处理排列 对于每个索引 我都可以找到该项目的新索引在哪里 但我不知道如何处理它 这是一个独立于编程语言的难题 ObservableList
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • iOS模型层通知Controller对象

    https developer apple com library archive documentation General Conceptual DevPedia CocoaCore MVC html https developer a
  • IIS7 和 MVC 2 出现 403.14 错误 已尝试了所有建议的修复方法

    ASP Net 4 框架上的 MVC 2 项目 我尝试在 IIS7 上设置它 但出现 403 14 错误 是的 我尝试了微软的修复 它启用了目录浏览 但与我想要的完全错误 是的 我运行了 aspnet regiis i 不 它仍然无法正常工
  • 讨论iPhone上的MVC实现

    我在不同的框架上使用 MVC 模式一段时间 例如 swing android gwt 现在 我正在学习iPhone框架 我对MVC的实现感到非常惊讶 我问的问题是关于视图和控制器交互的 首先 这就是我构思 MVC 模式的方式 视图和控制器通
  • 如何从表列javafx中删除行

    这些是我的表格列 Course and 描述 如果单击一行 该行变为 活动 突出显示 并且他们按下Delete按钮它应该删除该行 我该怎么做 我的代码Course列 以及我要添加什么事件侦听器到我的delete按钮 SuppressWarn
  • 复选框选择与 TableView 绑定

    How to bind with TableView selection model with checkbox isSelected in table view In manually using mouse multiple selec
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • Spring MVC http 500错误apache

    上面是我的程序的目录层次结构 我是 Spring 新手 正在学习 MVC 概念 我编写了一个程序 它将输入 名称 输入文本框并打印 Hello name 以下是我的目录结构和我创建的各种文件 web xml
  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • 如何监听场景图节点中的WindowEvent.WINDOW_SHOWN?

    似乎 WindowEvent WINDOW SHOWN 永远不会在场景图中的任何节点上分派 也没有 我能找到的 知道节点何时可见 渲染 显示 例如 测试启动器 java package com example javafx event im
  • Rspec 控制器测试,传递 JSON 参数

    我试图实现以下目标 在 RSpec 控制器测试中创建 POST json 请求 并向其传递参数 这是我的代码 it returns access token do post login email bla password bla1 for
  • 带有地图的 JavaFX TableView 对象

    因此 我对 JavaFx TableView 进行了一些挖掘 并找到了一些针对简单情况的不错的解决方案 This article http docs oracle com javafx 2 ui controls table view ht

随机推荐

  • 检索 jooq 中 selectCount 的值

    我有一些代码看起来像这样 Record record jooq selectCount from USERS fetchOne 目前我正在执行以下操作来获取计数 Integer count Integer record getValue 0
  • grep: -P 在 Jenkins 中仅支持 unibyte 和 UTF-8 语言环境

    我有一个 shell 脚本 可以在本地的 git bash 中正确执行 但是 当通过 Jenkins 使用与 shell 环境相同的 git bash 执行相同操作时 它会失败并显示 grep P 仅支持 unibyte 和 UTF 8 语
  • 复制工作表而不复制代码

    我可以通过调用它来复制工作表 Copy method Sheets Example Copy After Worksheets Sheet3 但是 这也会复制与该工作表关联的任何宏或事件处理程序 如何在不复制任何 Visual Basic
  • 对于每个控制变量必须是变量或对象

    这里对 VBA 真的很陌生 我环顾四周并尝试拼凑一些代码来满足我的需求 我认为已经差不多了 但我遇到的错误可能很容易克服 但我不知道如何克服 该代码查看当前工作表 STOCK 并从单元格 A2 中获取 目标 文本值 然后 它在另一个工作表
  • 如何创建每页显示 1 条记录的报告 (rdlc)

    让它工作时遇到一些麻烦 我基本上希望报告看起来类似于 我记得过去这样做的方法是在报表向导中创建 页面组 不过 我相信这是在 VS05 中 现在 VS10 中的报表向导有很大不同 它现在有列组和行组 但没有页面组 而且我也无法看到如何在没有向
  • Java内存不足异常

    我正在 Tomcat 中运行 Java Web 应用程序 该应用程序使用 Quartz 框架定期安排 cron 作业 这个 cron 作业涉及解析一个 4 MB 的 xml 文件 我正在使用 JDOM API 执行此操作 该 xml 文件包
  • 将 R 中直方图中的值集中在条形上

    希望将 x 轴的值绘制在 R 中条形的中心 在寻找实现这一点的方法时遇到问题 代码如下 hist sample avg breaks 7 ylim c 0 2000 main Histogram of Sample Average for
  • Cloud Run 请求限制

    目前 Cloud Run 的请求限制为32 Mb每个请求 这使得无法上传视频等文件 未对 GCP 存储进行任何更改 与此同时所有配额页面并未将此限制列为您可以向支持请求增加的限制 所以问题是 有谁知道如何增加此限制或如何使其成为可能 上传视
  • 具有固定标题和固定列的 HTML 表格?

    是否有 CSS JavaScript 技术来显示长 HTML 表格 使列标题在屏幕上保持固定 第一列保持固定并随数据滚动 我希望能够滚动浏览表格的内容 但始终能够看到顶部的列标题和左侧的第一列 如果有一个 jQuery 插件那就太好了 如果
  • 在pytorch中重置神经网络的参数

    我有一个具有以下结构的神经网络 class myNetwork nn Module def init self super myNetwork self init self bigru nn GRU input size 2 hidden
  • 在 Windows 资源管理器上下文菜单中添加分隔符(而不是在子菜单中)

    我发现 CommandFlags dword 00000040 将在条目下方添加分隔符 但仅添加到子菜单 在 subcommands 字符串下 例子here 有没有办法在主上下文菜单中添加分隔符 我正在使用的示例 HKEY CLASSES
  • git 过滤分支和 git 子树之间的区别?

    正在寻找 throw SO 来寻找答案 遇到了这个旧线程 它似乎没有给出任何答案 重新触发此线程希望有人知道 有人能告诉我 git subtree 和 git filter branch 之间的区别吗 我将在原始问题中使用相同的示例 git
  • Delphi:ListView(vsReport)单列标题标题具有自定义字体颜色?

    In a ListView with vsReport ViewStyle how can I customize the font color of just any single column header caption For ex
  • 线程是否在等待锁 FIFO?

    假设我有以下代码 static class static object myobj new object static void mymethod lock myobj my code 然后假设当线程 1 拥有锁时 线程 2 尝试运行 my
  • 抑制解决方案级别的警告。将警告视为解决方案级别的错误

    我正在努力为我的团队制定全球规则 我们在 C 项目中使用 VS2012 和 TFS 我想抑制一些警告并将一些警告视为错误 我找到了在项目级别执行此操作的方法 项目属性 gt 构建选项卡 但我们有超过一百个项目的解决方案 我正在寻找一些更简单
  • 添加行或使用 print.xtables 加粗单个 row.names – 在行之间添加一些内容?

    我尝试使用print xtable add to row得到这样的表格格式 sports share of ballers 22 3 share of skiers 4 6 瘾 share of smokers 20 3 share of
  • React Native 卡在 Starting Packager 上

    我是本地反应新手 我正在尝试构建一个应用程序来看看它是如何工作的 我按照此处给出的步骤进行操作 React Native 入门 直到 npm start 一切似乎都很好 在我输入 npm start 后 它说 12 08 53 PM 启动打
  • 更新 WebStorm 2016 中当前的缩进空间大小

    我需要在自动创建的 Ionic 项目中从 2 个空格的缩进样式切换为 4 个空格的缩进样式 我在 Mac OS X 上运行 WebStorm 2016 1 我已经尝试改变 网络风暴 偏好 代码风格 JavaScript 制表符和缩进 并调整
  • 卡桑德拉读取超时

    我正在从 cassandra 2 0 中提取大量数据 但不幸的是遇到超时异常 我的桌子 CREATE KEYSPACE StatisticsKeyspace WITH REPLICATION class SimpleStrategy rep
  • JavaFX 在没有控制器的 fxml 中包含 fxml

    我正在使用 javafx 编写一个应用程序 这是一个 多屏 应用程序 带有一个主菜单 我可以在其中切换场景 我的场景在不同的 fxml 文件中定义 因为我尝试使用 mvc 模式 所以我没有在 fxml 文件中设置控制器 而是在 FXMLlo