在下面的代码中为什么结果是“paint!”这个字符出现了两次啊!不是说paint()这个方法在调用是只有调用一次吗?为什么下面的代码中它自动调用了paint方法两次?请高手解答啊 !!!
import java.awt.*;
import java.awt.event.*;public class testpaint2 extends Frame{
int x=50;public static void main(String[] args)  {
         testpaint2 t2=new testpaint2();
         t2.launch();
}public void launch(){
    this.setBackground(Color.GREEN);
    this.setSize(800,600);
    this.setVisible(true);
    this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
    });}
public void paint(Graphics g){
    System.out.println("paint!");
    Color c=g.getColor();
    g.setColor(Color.RED);
    g.fillOval(x, 50, 30, 30);
    System.out.println(x);    System.out.println(x);
    g.setColor(c);
    x+=50;
        }
    }}

解决方案 »

  1.   

    应该是因为窗口每改变一次大小就要paint()一次的缘故吧,如果你把this.setSize(800,600);去掉就只能看到"paint!"打印一次了
      

  2.   

    厉害啊!!解决了~
    那么为什么setBackground(Color.GREEN)却不会在调一次paint(),而setSize(800,600)居然和paint()有了关系啊
      

  3.   

    你可以将paint()方法看做是用来刷新界面的,setBackground(Color.GREEN)不调用paint说明他不用刷新界面啊
      

  4.   

       paint()在Swing/awt中每个组件都有该方法,eg.JLabel、JPanel、JFrame...,当要对加载的组件改变样式时,都会调用该方法,实现组件的刷新效果。当然我们也可以调用repaint方法来手动刷新。我也可以重写paint方法,让其按照我们的实现来刷新组件。