当前位置: 首页 > 知识库问答 >
问题:

在同一场景中加载新的fxml

芮朗
2023-03-14
    null

我正试着做这样的事情,但它不起作用:

@FXML
private AnchorPane content;

@FXML
private void handleButtonAction(ActionEvent event) {        
    content = (AnchorPane) FXMLLoader.load("vista2.fxml");
}

谢谢你的帮助。

共有1个答案

西门飞星
2023-03-14

代码不工作的原因

加载器会创建一个新的AnchorPane,但您从不将新窗格添加到场景图中的父窗格中。

快速修复

content = (AnchorPane) FXMLLoader.load("vista2.fxml");
content.getChildren().setAll(FXMLLoader.load("vista2.fxml"));

您可能需要使用布局(例如,使用自动调整布局大小,如StackPanes而不是AnchorPanes),以获得您想要的准确行为。

我建议不要仅仅采用快速解决方法,而是回顾下面链接的简单框架,因为它可能为您提供一个更通用的机制来获得您想要的行为。

参考FXML导航框架

框架的机制与Kithril的回答中所建议的相同。

  1. 外部fxml的主窗格充当子窗格的持有者。
  2. 外部fxml的主控制器提供了一个可用于交换子窗格的公共方法。
  3. 使用外部布局的主控制器静态初始化一个方便导航器类。
  4. 导航器提供一个公共静态方法将新子窗格加载到主容器中(通过调用主控制器上的方法)。
  5. 子窗格由它们各自的fxml加载器在导航器中生成。

为什么要有一个框架

    null

所以我觉得这个案例需要一个小的演示框架。

框架输出示例

第一个屏幕显示了显示第一个Vista的应用程序布局。内容是一个在主应用程序布局中定义的标题和一个aliceblue颜色的可互换子内容窗格。

在找更简单的东西吗?

只需交换掉场景根:在JavaFX中更改场景。

其他选择?

 类似资料:
  • 问题内容: 我有2个fxml文件: 布局(标题,菜单栏和内容) Anchorpane(应该放在另一个fxml文件的内容中) 我想知道如何从“主”场景将第二个文件加载到内容空间内。在javaFX中工作是一件好事,还是加载一个新场景更好? 我正在尝试做这样的事情,但是不起作用: 谢谢您的帮助。 问题答案: 为什么您的代码不起作用 加载程序会创建一个新的AnchorPane,但是您绝不会将新窗格添加到场

  • 接口说明 将数据整合到一个地方进行查询,Wish3DEarth团队新增了添加场景的接口,来进行数据的整合操作 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/scene/1.0.0/add 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 title string form 是 场景名称 descrip

  • 问题内容: 我正在构建JavaFX应用程序,我想知道是否有关于如何尽快加载当前新内容的建议(最佳实践)。 当前我正在做的(或多或少)是这样的: 对于加载简单的s,es等的复杂场景而言,上面的方法对于简单的s BUT 来说足够好且快速。 我在的方法中进行的所有初始化。 在那里,我将项目添加到框中,进行初始化等,但是正如我所说的,这花费了太多时间。 难道我做错了什么?我应该在其他地方初始化吗? 谢谢。

  • 所以我有一个游戏对象,它会在必要时加载新场景。附加到游戏对象的脚本有一个变量,该变量保存对画布元素的引用(画布元素有一个进度条)。问题是,在我加载一个新场景并且我想在加载的场景中加载一个新场景后,我失去了对画布对象的引用,因为我无法将他设置为DontDestRoyOnLoad。 我所做的是我把画布元素(参见start函数()中的注释行)作为游戏对象的子元素,它不会被销毁...在我这样做之后,我没有

  • 我的程序有两个场景,,每个都有相应的控制器类。 我希望能够使用Stage的在我的秒控制器类上,在它使用Button的onAction事件和FXMLLoader加载到FirstController类之后。 这是我在秒控制器类上的代码片段: 基于我的第一个控制器类上的,其中的值是一个字符串。 然而,这会输出一个错误: 然后,在第一个控制器类加载第二个控制器类之后,如何在其上使用?