使用在学习this answer时学到的知识,我想实现一个自定义窗格。此窗格(称为BackgroundEffectPane)的主要目的是获取效果并将其仅应用于背景。这将使我能够以更简洁的方式在链接的答案中实现半透明的背景StackPane。

到目前为止,我已经阅读了PaneNode的文档。到目前为止,我看不到任何明显的方法可以重写以尽可能干净地执行此操作。与我相关的唯一事情是Pane中的getChildren()方法。

这是覆盖正确的事情吗?

Pane是Subclass的正确类别吗?

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

最佳答案

我不会为此覆盖任何方法。如果要创建提供此功能的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)。

10-08 01:50