制作自定义字段时,在覆盖paint()
与subpaint()
方法之间应该考虑什么来渲染字段的自定义部分?
我的代码目前覆盖了paint()
,但我刚刚阅读了建议实现subpaint()
方法的javadoc。在我非常简单的自定义字段中(例如带有渐变填充的自定义横幅),我唯一看到的区别是,如果我覆盖paint()
,那么我必须调用super.paint()
,但如果我覆盖{{1}那么就没有必要调用subpaint()
。
我意识到,对于更高级的自定义,需要考虑一些因素,并且其中一种方法很可能被视为不良实践。
我是否应该更改我的基本方法(以及我公司的方法),以便将来默认选择覆盖super.subpaint()
?
(我希望这不是一个讨论问题 - 这不是我的意图 - 谢谢)
答案 0 :(得分:2)
subpaint()
真正用于经理,不一定是自定义字段(是的,经理是一个字段)。它的默认实现是循环遍历其子字段并对其发出paintChild()
调用。另一方面,paint()
是Field要做与自身相关的绘图。在您的情况下,您应该覆盖paint()
。
那你为什么要覆盖subpaint()
?如果您需要子字段按特定顺序绘制自己,您可能会想要。假设您有一个自定义管理器,它将一些字段放在彼此之上。如果需要按特定顺序绘制,则会覆盖subpaint()
以确保正确的字段位于“顶部”。此外,管理员paint()
会调用其subpaint()
,如果您覆盖它,请记住这一点。