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