在JavaFX中扩展窗格

时间:2016-11-11 12:25:26

标签: java javafx

使用我在查看this answer时学到的东西,我想实现一个自定义窗格。此窗格的主要用途是 BackgroundEffectPane ,它将获取效果并仅将其应用于后台。这将允许我以更清晰的方式在链接的答案中实现半透明背景StackPane。

到目前为止,我已阅读了PaneNode的文档。到目前为止,我没有看到任何明显的方法来覆盖尽可能干净。唯一让我觉得相关的是Pane中的getChildren()方法。

Override是正确的吗?

Pane是Subclass的合适类吗?

TLDR:尝试创建自定义窗格,我覆盖哪些方法。我所要做的就是为背景添加效果。

1 个答案:

答案 0 :(得分:1)

我不会覆盖任何方法。如果要创建提供此功能的StackPane子类,只需在构造函数中调用getChildren().addAll(...)

public class BackgroundEffectPane extends StackPane {

    public BackgroundEffectPane(Node content) {
        getChildren().addAll(createBackground(), freeze(...), content);
    }

    // code refactored from other answer...
}

当然,现在你根本不再需要继承子类:

public class BackgroundEffectPane {

    private final Node content ;

    private final Parent effectPane ;

    public BackgroundEffectPane(Node content) {
        this.content = content ;
        this.effectPane = new StackPane(createBackground(), freeze(...), content);
    }

    public Parent getEffectPane() {
        return effectPane ;
    }

    // other code...
}

更好地封装了类,通过不暴露具有效果的窗格的底层实现(即API不会暴露您正在使用StackPane)。