【问题标题】:Is it possible to add a new node or parent to an already loaded fxml file in javafx?是否可以将新节点或父节点添加到 javafx 中已加载的 fxml 文件?
【发布时间】:2018-06-10 19:10:08
【问题描述】:

我最近正在编写一个 javafx 应用程序,其中一个部分客户端必须等待服务器获取人员列表,并且在获取列表后,它必须在将要添加到的列表视图中使用父母。该父级是和 fxml 文件,加载后我想知道是否可以将包含列表视图的 vbox 添加到父级。如果有人可以提供帮助,我将不胜感激......

【问题讨论】:

  • 使用FXMLLoader+fxml 只是创建场景的一种方式。生成的对象结构与通过在 java 代码中创建相同的对象结构创建的场景没有什么不同。可以用同样的方式修改场景。

标签: javafx


【解决方案1】:

根据您的问题,我猜您不熟悉控制器的概念或FXMLLoader 执行的相关 FXML 注入。 This answer by 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 上有很多关于如何做到这一点的问题/答案。

这里是另一个可以帮助您的资源:@​​987654322@。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多