为什么要调用“repaint()”而不是直接在Applet中调用“paint(..)”?

时间:2012-08-07 02:51:25

标签: java swing applet awt repaint

我们覆盖像这样的绘画方法

public void paint(Graphics g)
{
   g.drawString(msg,xpos,ypos);
}

如果我们有另一种方法,可以说一个鼠标按下的事件方法

public void mousePressed(MouseEvent me)    
    {
        xpos=me.getX();  // msg, xpos and ypos are variables of class
        ypos= me.getY();
        msg="You pressed mouse";
        repaint();
    }

为什么我们不能称之为油漆(Graphics g)而不是repaint()

2 个答案:

答案 0 :(得分:14)

你应该尝试一下。你会注意到

  1. 您必须以某种方式获取Graphics对象g
  2. 在事件处理程序的主体中调用paint不是最佳做法,因为它会导致该方法的主体立即在GUI线程上执行,因此在{{1}之前不能再处理任何事件}返回。 OTOH,paint计划在将来的某个方便点发生绘制事件,并且不会使GUI看起来挂起。当然,在你的情况下,repaint并不是非常慢,但总的来说......
  3. Here is the classic article on painting,来自Java人员自己。

答案 1 :(得分:9)

调用repaint()不一定会立即调用paint()。它要求安排呼叫。

通常应该调用重绘而不是绘制,以便GUI框架可以正确地重新安排重新绘制。它会做一些事情,比如确保在正确的线程上调用paint,并且如果它们在框架到处进行实际绘制之前发生,则有机会将多个调用合并到重绘中。

调用重绘会更加健壮。