Java Swing中paint()
,paintComponent()
和paintComponents()
之间的实际区别是什么?Swing中paint,paintComponent和paintComponents之间的区别
我试图理解Oracle文档中解释的内容,但我不清楚。
Java Swing中paint()
,paintComponent()
和paintComponents()
之间的实际区别是什么?Swing中paint,paintComponent和paintComponents之间的区别
我试图理解Oracle文档中解释的内容,但我不清楚。
paint()
。JApplet
,JFrame
,JWindow
,JDialog
..),覆盖paint()
。但是有一些很好的理由而不是涂在TLC。也许是一个单独问题的主题。paintComponent()
。paintComponents()
,将其留给API以在需要时调用它。一定要在覆盖某个方法时使用@Override
表示法。
这样做会暗示试图在JFrame
(它没有这种方法)中覆盖paintComponent(..)
的问题,这很常见。
你可能有兴趣在阅读Painting in AWT and Swing
引述:
适用于AWT的轻量级组件规则也适用于Swing组件 - 例如,paint()方法时,它的时候被调用呈现 - 除了摇摆进一步因素涂料()调用成三个独立的方法,它们在下面的顺序调用:
protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
Swing程序应该覆盖paintComponent()而不是覆盖paint()。虽然API允许,但通常没有理由重写paintBorder()或paintComponents()(如果你这样做,确保你知道你在做什么!)。这种保理使程序更容易覆盖他们需要扩展的绘画部分。例如,这解决了前面提到的AWT问题,即无法调用super.paint()会阻止任何轻量级子项出现。
嗨,是构造函数完成执行后立即调用paint()函数吗? – GMsoF 2012-11-27 02:17:42
或者我们必须手动调用repaint()? – GMsoF 2012-11-27 02:18:03
@GMsoF'repaint()'将在需要时自动调用。如果动画,它可能也被明确地调用。尽管调用次数太多,但速度太快,并且一些调用会被合并(忽略)。 – 2012-11-27 03:29:02