我遇到的问题是:在我添加完一些组件后再用repaint()方法不能成功调用paint(Graphics g)了!我认为这是组件引起的,但是不知道怎么引起的?我在JFrame.getContentPane()上加了一个JPanel和JLabel.它的Layout是null。

解决方案 »

  1.   

    在方法中使用repaint方法就会调用paint方法
      

  2.   

    在Applet类中repaint()先调用update()清除面板,然后吊paint()方法
    JApplet类的update()不再清除背景了,它掉paint()
      

  3.   

    等消息分发线程处理一个重绘消息的时候,会调用paint方法,
    如果你调用了repaint,如果组件是轻量级的,则不擦除背景并要求夫窗口重绘,如果父窗口是轻量级的,继续向上找,直到找到一个重量级父窗口(本地实现窗口),擦除背景,最后在系统的实践队列中插入一个消息,表示组件需要被重绘,如果发现队列中有这个消息,那么消息将会被合并(message collapse),等到处里这个消息的时候,再调用update重绘。JComponent的update默认实现是直接调paint(),这样paint被调用,组建被重绘
    但是重写update()可以限定重绘的范围来实现增量重绘(一般很难实现),这样性能会搞很多总之,paint/update方法一般由消息分发线程调用,你经常调用的是repaint明白?不明白看看这个
    http://java.sun.com/products/jfc/tsc/articles/painting/