黑莓:覆盖paint()vs subpaint()

时间:2011-04-22 12:42:40

标签: java blackberry

制作自定义字段时,在覆盖paint()subpaint()方法之间应该考虑什么来渲染字段的自定义部分?

我的代码目前覆盖了paint(),但我刚刚阅读了建议实现subpaint()方法的javadoc。在我非常简单的自定义字段中(例如带有渐变填充的自定义横幅),我唯一看到的区别是,如果我覆盖paint(),那么我必须调用super.paint(),但如果我覆盖{{1}那么就没有必要调用subpaint()

我意识到,对于更高级的自定义,需要考虑一些因素,并且其中一种方法很可能被视为不良实践。

我是否应该更改我的基本方法(以及我公司的方法),以便将来默认选择覆盖super.subpaint()

(我希望这不是一个讨论问题 - 这不是我的意图 - 谢谢)

1 个答案:

答案 0 :(得分:2)

subpaint()真正用于经理,不一定是自定义字段(是的,经理是一个字段)。它的默认实现是循环遍历其子字段并对其发出paintChild()调用。另一方面,paint()是Field要做与自身相关的绘图。在您的情况下,您应该覆盖paint()

那你为什么要覆盖subpaint()?如果您需要子字段按特定顺序绘制自己,您可能会想要。假设您有一个自定义管理器,它将一些字段放在彼此之上。如果需要按特定顺序绘制,则会覆盖subpaint()以确保正确的字段位于“顶部”。此外,管理员paint()会调用其subpaint(),如果您覆盖它,请记住这一点。