update()和repaint方法都自动调用paint方法,有什么区别?

时间:2022-06-05 02:25:54
有一点我可以肯定,这两者都会自动调用paint方法。

10 个解决方案

#1


转的

paint()是在组件第一次显示时调用,完成组件的绘制。       
  update()进行初始化(背景色填充、设置组件前景色)后调用paint()绘制组件。       
  repaint()则调用update()。它之所以存在是因为要支持以不同的方式进行update()操作,如:repaint();repaint(long     time);repaint(int     x,int     y,int     width,int     height),无参的repaint()只是对update()进行简单的调用。       
      
  可以说,paint()是最原子的操作,update()则允许在它之上对它的外观进行一些定制,repaint()则偏重于定制调用的方式:你可以在指定时间间隔后进行重画,也可以在指定区域内绘制组件,等等。 

#2


感觉楼上说来说去还是有点糊,感觉好象一样。

#3


调用update()比 repaint()得坐标要向下低20个左右的像素

#4


有一个东西叫google

repaint()方法用于重绘组件,该方法有下面四种形式:

1。public void repaint()

2。public void repaint(long tm)

//指定调用update方法之前等待的最大毫秒数tm

3。public void repaint(int x,int y,int width,int height)

//重绘组件的指定矩形区域

4。public void repaint(ling tm,int x,int y,int width,int height)


repaint方法不总是马上执行,Java虽然会尽可能快的执行repaint,当Applet运行在较慢的平台上或计算机较忙时,应该考虑使用第2或4种repaint方法,指定在多长时间内必须执行repaint,否则就放弃。

Update()方法用于更新组件,AWT调用该方法以响应对repaint()的调用,在调用update()或paint()之前,组件的外观将不会发生改变。它更新组件的步骤为:通过充填组件的背景色来清除该组件,然后,设置图形上下文(其原点为该组件的左顶点)的颜色为该组件的前景色,最后,调用paint方法完整地重绘该组件。该方法的原型为:

Public void update(Graphics g)

Paint()方法用于绘制组件,当需要绘制组件的内容时调用该方法。该方法的原型为:

Public void paint(Graphics g)

#5


3楼为什么这么说,要低20个象素点????

#6


后天结贴,求答案,大侠。

#7


如果调用repaint(),则相当于先自动调用update(),再自动调用paint()方法。

#8


首先你要分清轻量级组件和重量级组件

对于轻量级组件
repaint方法会尽快调用paint方法

对于重量级组件
repaint方法会调用update方法
来看下Canvas类的update方法

public void update(Graphics g) {
        g.clearRect(0, 0, width, height);
        paint(g);
    }


对于重量级组件repaint方法只是调用update方法
而paint方法是默认update方法的一部分
所以如果对于重量级组件
你重写了update方法让它不调用paint方法
那你的repaint的方法就不会调用到paint方法了
你所肯定的东西在这种条件下是错的

#9


如果你repaint()就首先调用update();

#10


是这样吗

#1


转的

paint()是在组件第一次显示时调用,完成组件的绘制。       
  update()进行初始化(背景色填充、设置组件前景色)后调用paint()绘制组件。       
  repaint()则调用update()。它之所以存在是因为要支持以不同的方式进行update()操作,如:repaint();repaint(long     time);repaint(int     x,int     y,int     width,int     height),无参的repaint()只是对update()进行简单的调用。       
      
  可以说,paint()是最原子的操作,update()则允许在它之上对它的外观进行一些定制,repaint()则偏重于定制调用的方式:你可以在指定时间间隔后进行重画,也可以在指定区域内绘制组件,等等。 

#2


感觉楼上说来说去还是有点糊,感觉好象一样。

#3


调用update()比 repaint()得坐标要向下低20个左右的像素

#4


有一个东西叫google

repaint()方法用于重绘组件,该方法有下面四种形式:

1。public void repaint()

2。public void repaint(long tm)

//指定调用update方法之前等待的最大毫秒数tm

3。public void repaint(int x,int y,int width,int height)

//重绘组件的指定矩形区域

4。public void repaint(ling tm,int x,int y,int width,int height)


repaint方法不总是马上执行,Java虽然会尽可能快的执行repaint,当Applet运行在较慢的平台上或计算机较忙时,应该考虑使用第2或4种repaint方法,指定在多长时间内必须执行repaint,否则就放弃。

Update()方法用于更新组件,AWT调用该方法以响应对repaint()的调用,在调用update()或paint()之前,组件的外观将不会发生改变。它更新组件的步骤为:通过充填组件的背景色来清除该组件,然后,设置图形上下文(其原点为该组件的左顶点)的颜色为该组件的前景色,最后,调用paint方法完整地重绘该组件。该方法的原型为:

Public void update(Graphics g)

Paint()方法用于绘制组件,当需要绘制组件的内容时调用该方法。该方法的原型为:

Public void paint(Graphics g)

#5


3楼为什么这么说,要低20个象素点????

#6


后天结贴,求答案,大侠。

#7


如果调用repaint(),则相当于先自动调用update(),再自动调用paint()方法。

#8


首先你要分清轻量级组件和重量级组件

对于轻量级组件
repaint方法会尽快调用paint方法

对于重量级组件
repaint方法会调用update方法
来看下Canvas类的update方法

public void update(Graphics g) {
        g.clearRect(0, 0, width, height);
        paint(g);
    }


对于重量级组件repaint方法只是调用update方法
而paint方法是默认update方法的一部分
所以如果对于重量级组件
你重写了update方法让它不调用paint方法
那你的repaint的方法就不会调用到paint方法了
你所肯定的东西在这种条件下是错的

#9


如果你repaint()就首先调用update();

#10


是这样吗