我在Jbuilder9中写了如下代码(以下只给出其中的代码片段): 
public class canvas extends Canvas { 
public void paint(Graphics g) 

g.setColor(Color.BLUE); 
g.fillRoundRect(100,100,50,50,20,20); 
g.drawRoundRect(100,100,50,50,20,20); 

public void update(Graphics g) 

System.out.println("Paint"); 

} public class Frame1 extends JFrame { 
...... 
public Frame1() { 
...... 
canvas can=new canvas(); 
can.setBackground(Color.white); 
can.repaint(); 
...... 

不是说repaint要先调用update,再调用paint的么?这里repain怎么不调用update(因为没有执行System.out.println("Paint");)?
我qq:77658745 需要全部代码的可以q我

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sjp1985】截止到2008-07-29 13:35:48的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    AWT绘制的基本原理与基本控制AWT的绘制与界面更新使用了一个单独的线程,称为AWT线程。这个线程可以在两种情形下更新显示。一种情况是界面“显露”,这可能会发生在界面首次显示时,或者界面某一部分由于被其它窗口遮盖后重新显示时。界面显露的处理是AWT自动进行的,。第二种情况是程序在显示内容有所改变时进行界面的更新,而这一般是由应用程序的逻辑来控制的。上面的两种情况最终都将作用于某个paint()方法,更准确地说是具有调用关系的一组 paint() 方法。如果是一个component的刷新,则它的 paint()方法被调用;如果是界面容器(Container)的刷新,则它的paint()方法将按某种策略/顺序依次调用加入其中的每个component的paint()方法。paint 方法的声明形式为:public void paint(Graphics g);paint() 方法所传入的参数――一个 java.awt.Graphics 对象将是一个经裁剪的相关显示区的图像代表(而不会是整个显示区)。我们对可显示图形元素的绘制就是在通过重写 paint()方法,在其中对传入的Graphics 对象g进行操作完成的。当我们应用程序的逻辑要对系统界面进行更新时,调用 repaint() 方法来通知AWT线程进行刷新操作。repaint() 方法实际会让 AWT线程去调用另外一个方法,update。update方法在默认情况下会做两件事,一是清除当前区域内容,二是调用其 paint()方法完成实际绘制工作。
      

  3.   

    java API中关于repaint()和update()的注释
    public void repaint()重绘此组件。 
    如果此组件是轻量组件,则此方法会尽快调用此组件的 paint 方法。否则此方法会尽快调用此组件的 update 方法。public void update(Graphics g)更新组件。 
    如果此组件不是轻量组件,则为了响应对 repaint 的调用,AWT 调用 update 方法。可以假定未清除背景。 
    Component 的 update 方法调用此组件的 paint 方法来重绘此组件。为响应对 repaint 的调用而需要其他工作的子类通常重写此方法。重写此方法的 Component 子类应该调用 super.update(g),或者直接从其 update 方法中调用 paint(g)。