首页 > 解决方案 > 有没有办法扩展 fxml 控制器

问题描述

我正在构建一个应用程序,我想在应用程序的每个页面中放入文本“你好”,标签上写着现在连接的客户端的名称,我该怎么做???例如:如果我现在已连接,在应用程序所有页面的顶部我会看到你好 Nadeen

标签: javajavafx

解决方案


使用组合,而不是继承。

继承是试图实现这样的事情的错误概念。而是为此添加创建父布局并添加功能以在其中显示内容。

例子:

public class ParentController {

    @FXML
    private StackPane container;

    public void setContent(Node content) {
        // replace old container content
        container.getChildren().setAll(content);
    }

    // code for setting the name...

}
<VBox>
    <children>
        <Label text="Nadeen"/>
        <StackPane fx:id="container" VBox.vgrow="ALWAYS"/>
    <children>
</VBox>

这允许您将内容替换为加载不同 fxml 文件的结果。

ParentController controller = ...;
controller.setContent(someNode);
...
controller.setContent(someOtherNode);

确保按照此处所述正确访问控制器:

传递参数 JavaFX FXML

您也可以使用自定义组件方法...


推荐阅读