为什么不应该在Jbutton.update上使用getGraphics?

问题描述

我总是这样做

Jbutton.setEnabled(false);
Jbutton.update(Jbutton.getGraphics());

在禁用按钮时,但是有人告诉我Jbutton.update(Jbutton.getGraphics());不应使用,或者至少不应该那样使用。为什么?效率不高吗?不对吗我应该改变我的方法吗?

解决方法

不应在Jbutton.update上使用getGraphics(),

实际上,它比那还宽。程序员切勿在任何getGraphics(或AWT JComponent)上使用Component或在Swing(和AWT)窗口中使用相同的语言。

为什么?

因为API会在需要重绘时调用绘制方法(例如,从最小化还原窗口,将另一个窗口移至顶部或远离该窗口,使其移到最前面。)。

因此,任何使用getGraphics的呼叫都是“瞬态”。

[Holger的评论中提到了进行自定义绘画的正确方法,但这不是问题。 ]