public void paint(Graphics g){
     System.out.println("paint");
    }
    public void update(Graphics g){
     System.out.println("update");
    
    }
    public void repaint(Graphics g) {
     System.out.println("repaint");
    }repaint 方法:输出:repaint paint
update 方法: 输出:update paint

解决方案 »

  1.   

    ......
    你把repaint都重写成那样了
    哪里会调用update啊
    说原来的repaint会调用update
    是因为repaint方法中有一句话是update();
      

  2.   

    在你给的例子上做一修改import java.awt.*;public class MyCanvas extends Canvas
    {
    public MyCanvas()
    {
    super();
    }

    public void repaint()
    {
    super.repaint();
    System.out.println("repaint");
    }

    public void update(Graphics g)
    {
    super.update(g);
    System.out.println("update");
    }

    public void paint(Graphics g)
    {
    super.paint(g);
    System.out.println("paint");
    }

    public static void main(String[] args)
    {
    Frame frame = new Frame();
    frame.setLayout(new BorderLayout());
    MyCanvas canvas = new MyCanvas();
    frame.add(canvas, BorderLayout.CENTER);
    frame.setSize(300, 100);
    frame.validate();
    frame.setVisible(true);
    canvas.repaint();//注意
    }
    }
    这里Canvas类是重量级组建
    默认repaint方法是会调用update的
    如果注释掉注意那句话
    输出是:
    paint如果没注释掉canvas.repaint()
    输出是:
    repaint
    paint
    paint
    update其中有一个paint是不调用canvas.repaint()就会输出的
    那么剩下
    repaint
    paint
    update也许你会奇怪为什么update在paint之后输出
    看下我们重写的update
    public void update(Graphics g)
    {
    super.update(g);//这里面包含paint() 所以paint在update前输出了
    System.out.println("update");
    }
      

  3.   

    你在你重写的方法里都调用下super.****再试试
      

  4.   

    在需要重画时,系统会自动调用update()方法