javafx - 是否可以将新节点或父节点添加到 javafx 中已加载的 fxml 文件?
问题描述
我最近正在编写一个 javafx 应用程序,其中一个部分是客户端必须等待服务器获取人员列表,并且在获取列表后,它必须在要添加到父级的列表视图中使用。该父级是和 fxml 文件,加载后我想知道是否可以将包含列表视图的 vbox 添加到父级。如果有人可以提供帮助,我将不胜感激...
解决方案
根据您的问题,我了解到您不熟悉控制器的概念或由FXMLLoader
. James_D 的这个答案涵盖了 JavaFX 生命周期的基础知识,但它首先介绍了加载 FXML 文件时所涉及的过程的基础知识。如果要修改通过 FXML 加载的场景图,则需要使用具有适当FXML
注释字段的控制器类。例如,假设您的父母是BorderPane
. 在您的 FXML 文件中,您将拥有:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane fx:id="parent" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/10.0.1"
fx:controller="some.package.YourController">
<top>
<!-- maybe have something like a MenuBar here -->
</top>
<bottom>
<!-- maybe have a some type of status bar here -->
</bottom>
</BorderPane>
注意fx:controller
属性;它是要实例化并用作控制器的类的类名。还要注意fx:id
属性。在您的控制器类中,您将拥有:
package some.package;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXML;
public class YourController {
@FXML
private BorderPane parent; // field name matches the fx:id attribute
@FXML
private void initialize() {
// do any initializing if needed (if not, get rid of this method)
// you can access and modify any FXML injected field from this method
}
}
然后您可以通过控制器实例使用父级。您还可以在控制器中创建和链接事件处理程序方法,并根据用户操作执行某些行为。然而,重要的是要注意,如何更改控制器中 UI 的状态取决于您如何访问模型类。您需要让模型可用于您的控制器,并可能在多个控制器之间共享它。Stack Overflow 上有很多关于如何做到这一点的问题/答案。
这是另一个可能对您有所帮助的资源:FXML 简介。
推荐阅读
- c# - 在 Oracle 服务器 ado.net c# 上以编程方式创建数据库
- android - Android BLE 应用 Gatt 回调停止响应
- scala - 将 JsArray 的 JsArray 转换为 Case 类
- c# - 拥有一个测试多个项目的单元测试项目
- datastage - 从 Datastage 输出到文件中删除 LF
- regex - 更改两个已定义单词之间的字符
- mysql - SQL获取一列以匹配CASE中的多个条件
- c++ - 递归地将模板模板传递给模板模板函数
- amazon-web-services - AWS ECS 无法运行超过 10 个任务
- c# - 使用 SMTP 通过 C# 从 Office 365 邮箱发送电子邮件