Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要打电话;重新绘制();而不是直接呼叫;油漆(……)”;在Applet中?_Java_Swing_Applet_Awt_Repaint - Fatal编程技术网

Java 为什么要打电话;重新绘制();而不是直接呼叫;油漆(……)”;在Applet中?

Java 为什么要打电话;重新绘制();而不是直接呼叫;油漆(……)”;在Applet中?,java,swing,applet,awt,repaint,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();

我们像这样覆盖绘制方法

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()

您可能应该试试。你会注意到的

  • 您必须以某种方式获得
    图形
    对象
    g
  • 在事件处理程序的主体中调用
    paint
    不是最佳做法,因为它会导致该方法的主体立即在GUI线程上执行,因此在
    paint
    返回之前不能处理更多的事件。OTOH,
    repaint
    将绘制事件安排在将来某个方便的时间点发生,并且不会使GUI看起来挂起。诚然,在您的情况下,
    drawString
    并不是非常慢,但一般来说
  • 调用repaint()不一定会立即导致调用paint()。它要求安排通话

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


    调用repaint将更加健壮。

    简短回答:因为这样会在错误的时间调用,或者可能在错误的线程中调用(并且没有适当的图形)。当我们通常重写它时,我们只给graphics类的实例提供其他内容,因此为什么图形不合适?0必须在平台/操作系统的帮助下由JVM自己准备和交付图形对象。你不能只是试图当场弥补。提到调度程序+1——另外,因为你会绕过调度程序,你可能会以糟糕的性能告终,因为重新绘制管理器正在建立需要更新的内容的想法,而不是每次更新整个屏幕;)