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)

    我正在尝试更改标签中的文本 该文本是在不同场景的文本字段中输入的文本 我制作了 2 个 FXML 文件 第一个包含一个文本字段和 确定 按钮 第二个包含一个标签 带有文本 标签 我的目标是在文本字段中输入文本 当我按 确定 gt 打开新场景
  • 无法在Phalcon php中调用除indexAction之外的indexController的操作

    我的 xampp htdocs 目录中有一个名为 phalcon 的简单项目 并且我将 apache 配置为指向该文件夹 以便我可以在浏览器中转到 phalcon 当我尝试打开索引 默认 以外的索引控制器视图时 会出现问题 例如 我在索引控
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • 使用 formsauthentication 进行登录并使用 HttpContext.Current.User.Identity

    我制作了一个网站 其页面包含剃刀表单 用户可以在此表单上登录 然后重定向到不同的页面 登录 和注销 与表单身份验证成功配合 但是 我似乎无法使用 HttpContext Current User Identity Name 来检索存储的用户
  • 在视图中获取路线名称

    我尝试设计导航菜单 我有 3 个这样的项目 仪表板 Pages List Add Articles List Add 现在我想大胆Pages当用户处于此部分时 如果在Add页面我都想要粗体Pages and Add my routes ph
  • Javafx 可拆卸窗格系统

    这是我在几个不同的软件中看到的我喜欢的东西 我不知道它来自哪里 也不知道它的真正名称是什么 但这里是 Visual Studio 中的窗格系统的示例 请注意我如何轻松地将窗格固定在任何地方 Javafx 可以实现这样的事情吗 我知道这个问题
  • ActionMailer最佳实践:调用模型或控制器中的方法?

    发送电子邮件通常是在对模型执行操作后调用的 但电子邮件本身是一个视图操作 我正在寻找您如何思考要问自己哪些问题来确定将操作邮件程序方法调用放在哪里 我见过 使用过它们 在模型方法中 相关但独立的关注点耦合不良 在模型的回调中 例如 afte
  • _Layout.cshtml无法直接请求,因为它调用了“RenderBody”方法

    我使用属性来路由 这是否相关 我不知道 当我不使用 Route 属性时 共享控制器中的 Layaout 操作不起作用 但页面正在呈现 public class SharedController Controller GET Shared A
  • 如何在 JavaFX 中对单选按钮的最大可选复选框进行限制?

    请看下面的图片 您就会了解我的应用程序的布局 我希望能够动态选择多少CheckBox 启用下拉菜单 是可选的 固定数量 我想用这 3 个人来实现这个目标RadioButton 在垂直模式下全部 4CheckBox必须选择 不少于 在混合模式
  • 如何在JavaFX中有效地滚动和缩放大图像?

    作为图像处理应用程序的一部分 我需要创建具有缩放 滚动和矢量叠加功能的简单查看器模块 图像相当大 40000x20000 这使得 ImageView 上的操作变慢 缓冲等 在 JavaFX 中处理巨大图像时 改善用户体验的最佳选项是什么 我
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • Mac OS X 下的 JavaFX:系统菜单和模态窗口

    我目前面临 Mac OS X 下的 JavaFX 菜单和模式对话框的问题 我正在使用该方法 MenuBar setUseSystemMenuBar true 为了将系统菜单栏用于我的应用程序菜单 这工作正常 但如果模式对话框打开 菜单不会被
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • Javafx 拖放 TabPane

    我 在 JavaFx 应用程序中 有一个带有不同选项卡的选项卡 我想实现拖放功能以将选项卡拖到舞台之外 这样它就可以生成一个新窗口 就像在 Google Chrome 中一样 谢谢您的帮助 您应该检查 Tom Schindl 在他的网站上显
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 如何强制 JavaFX 字体抗锯齿?

    在测试 JavaFX 8 应用程序的 GUI 时 我注意到某些标签不显示抗锯齿文本 经过一番谷歌搜索和挣扎后 我发现正在发生一件非常烦人的事情 抗锯齿仅应用于字体大小大于 80 像素的标签 下面是一个比较应用了 AA 的 JavaFX 和
  • 如何在 AngularJS 中从 ng-include 切换控制器值?

    我正在使用 AngularJS 我有一个header html我已经使用 ng include 将该 html 页面合并到另一个 html 中 另外 我有一个下拉列表header html我希望显示所选值 从下拉列表中 列表 我怎样才能做到
  • javaFX helloworld jar 无法在不同平台上运行

    我对 JavaFX 很陌生 不确定是否有人知道我做错了什么 这是场景 在win 7上 使用netbeans 8和jdk1 8 0 05创建了一个helloworld jar 在 win 7 上 java jar helloworld jar
  • 将 JavaFX 按钮放置在特定位置

    我的问题是如何将 javafx 按钮放置在特定位置 我一直尝试执行这个简单的代码 结果是按钮仅位于屏幕中心 而不是我想要的位置 我正在使用 StackPane Code Button button new Button button set
  • 服务层和存储库

    我使用 MVC 框架已经有一段时间了 我真的很喜欢如何分离关注点 我养成了让控制器做大量工作的坏习惯 所以我真的在寻求一些建议 当我第一次开始使用 MVC 时 我经常在数据库工作完成后让控制器对模型进行操作 我知道这很糟糕 所以将这项工作转

随机推荐

  • 检索 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