3

我们像这样覆盖paint方法

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

如果我们有另一种方法,可以说一个 mousepressed 事件方法

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

为什么我们不能叫paint(Graphics g)而不是repaint()

4

2 回答 2

14

你应该试试看。你会注意到

  1. 您将不得不以某种方式获取Graphics对象g
  2. 调用事件处理程序的主体不是最佳实践,因为它会导致该方法的主体立即在 GUI 线程上执行,因此在返回paint之前无法处理更多事件。paintOTOH,repaint将绘制事件安排在将来某个方便的时间点发生,并且不会使 GUI 看起来挂起。当然,在你的情况下,drawString并不是非常慢,但总的来说......

这是关于绘画的经典文章,来自 Java 人自己。

于 2012-08-07T02:58:51.330 回答
9

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

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

调用 repaint 会更加健壮。

于 2012-08-07T03:00:07.797 回答