使用在学习this answer时学到的知识,我想实现一个自定义窗格。此窗格(称为BackgroundEffectPane)的主要目的是获取效果并将其仅应用于背景。这将使我能够以更简洁的方式在链接的答案中实现半透明的背景StackPane。
到目前为止,我已经阅读了Pane和Node的文档。到目前为止,我看不到任何明显的方法可以重写以尽可能干净地执行此操作。与我相关的唯一事情是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
)。