制作自定义字段时,在覆盖paint()vs subpaint()方法以呈现字段的自定义部分之间应该考虑什么?
paint()
subpaint()
我的代码当前覆盖了paint(),但是我只是阅读了建议实现该subpaint()方法的javadoc 。在我非常简单的自定义字段(例如带有渐变填充的自定义横幅)中,我可以看到的唯一区别是,如果我覆盖paint(),则必须调用super.paint(),但是如果我覆盖了,subpaint()则无需调用super.subpaint()。
super.paint()
super.subpaint()
我意识到,对于更高级的定制,需要考虑一些因素,其中一种方法很可能被认为是不良实践。
我是否应该更改我的基本方法(以及我公司中的基本方法),以选择subpaint()将来默认使用替代方法?
(我希望这不是讨论问题,这不是我的意图,谢谢)
subpaint()是真正用于Manager的,不一定是自定义字段(是的,Manager是一个Field)。它的默认实现是仅遍历其子字段并对其发出paintChild()调用。paint()另一方面,是让Field进行与自身相关的绘图。就您而言,您应该压倒一切paint()。
paintChild()
那么,为什么要覆盖subpaint()?您需要是否需要子Field来按一定顺序绘制自己。假设您有一个自定义管理器,该管理器将某些字段相互叠加。如果需要按特定顺序绘制它们,则可以覆盖subpaint()以确保正确的“字段”位于“顶部”。此外,经理paint()会调用它subpaint(),如果您覆盖它,则要记住这一点。