使用我在查看this answer时学到的东西,我想实现一个自定义窗格。此窗格的主要用途是 BackgroundEffectPane ,它将获取效果并仅将其应用于后台。这将允许我以更清晰的方式在链接的答案中实现半透明背景StackPane。
到目前为止,我已阅读了Pane和Node的文档。到目前为止,我没有看到任何明显的方法来覆盖尽可能干净。唯一让我觉得相关的是Pane中的getChildren()方法。
Override是正确的吗?
Pane是Subclass的合适类吗?
TLDR:尝试创建自定义窗格,我覆盖哪些方法。我所要做的就是为背景添加效果。
答案 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
)。