下面程序实现了给定半径面随机颜色的圆,现在要求用纯种实现画20个圆,每隔两秒画一个,画出的圆不消失,颜色位置随机出现
/********Container类********/import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;public class Cantainer extends JFrame implements ActionListener 
{
     Container c = this.getContentPane();
    BorderLayout bL = new BorderLayout();
    JTextField jtf;
    JButton btn;
    public static int num;
    String s;    
    Circle applet;
   // Graphics g;
    public Cantainer()
    {
        btn=new JButton("确定");
        jtf=new JTextField();
        c.setLayout(bL);
        c.add(jtf,BorderLayout.NORTH);
        c.add(btn,BorderLayout.SOUTH);
        btn.addActionListener(this);
        applet = new Circle();
        applet.init();
        c.add(applet, BorderLayout.CENTER);
    }
    public void actionPerformed(ActionEvent e) 
    {    
        s=jtf.getText();
        num=Integer.parseInt(s);
        applet.setR(num);
        for(int i=1;i<20;i++){
         System.out.print(i);
            applet.repaint();
            c.setSize(500,500+i);
        }        
    }
}/*********** circle类************/
package com.jluzh.shiyan;
import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;import java.util.Random;
public class Circle extends Applet{
    int x,y;
    int r;
    int R,G,B;
    Graphics g;
    Random rd=new Random();    Circle(int r)
    {
        this();
        this.r=r;
        init();
    }    public Circle(){
        super();
    }    public void init(){
        this.resize(500,500);
    }    public void paint(Graphics g){
        x=rd.nextInt(this.getWidth());
        y=rd.nextInt(this.getHeight());
        R=rd.nextInt(255);
        B=rd.nextInt(255);
        G=rd.nextInt(255);
      //  for(int i=0;i<10;i++){
            g.setColor(Color.white);
            Color color=new Color(R,G,B);    
            g.setColor(color);
            g.fillArc(x,y,r,r,0,360);
           

       // }
    }    public void setR(int r) {
        this.r = r;
    }
}
/******************main类************************/
public class Main {
    public static void main(String[] args) {
        Cantainer c=new Cantainer();
        c.setSize(500, 500);
        c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        c.setVisible(true);
    }
}

解决方案 »

  1.   

    把paint方法改成paintComponents(Graphics g)
      

  2.   

    public void paint(Graphics g){ -> public void paintComponents(Graphics g){
      

  3.   

    public void paint(Graphics g){ -> public void paintComponents(Graphics g){
      

  4.   

    applet.repaint(); -> applet.paintComponents(applet.getGraphics());
      

  5.   

    可以的,用个timer或者thread的话自己sleep来控制
      

  6.   

    你想在什么地方实现,比如点按钮的时候生成线程
        public void actionPerformed(ActionEvent e) {    
            s=jtf.getText();
            num=Integer.parseInt(s);
            applet.setR(num);
            //for(int i=1;i<20;i++){
            //    System.out.print(i);
            //    applet.repaint();
            //    c.setSize(500,500+i);
            //}
            Thread t = new Thread() {
                public void run() {
                    while (true) {
                        applet.paintComponent(applet.getGraphics());
                        c.setSize(500,500+i);
                        try {sleep(2000);} catch (Exception e) {}
                    }
                }
            }.start();
            btn.setEnabled(false); //避免多次点按钮
        }
      

  7.   

    Thread t = new Thread() {
                public void run() {
                    while (true) {
                        applet.paintComponent(applet.getGraphics());
                        c.setSize(500,500+i);
                        try {sleep(2000);} catch (Exception e) {}
                    }
                }
            };
    t.start(); //不好意思,这里分开来写
      

  8.   

    清空其实调用一下applet.repaint();就可以了
    不知道你的意图是什么,在你的基础上帮你改
    一种用线程,一种用timer,建议还是用timer控制的好
    public class Cantainer extends JFrame implements ActionListener {
        Container c = this.getContentPane();
        BorderLayout bL = new BorderLayout();
        JTextField jtf;
        JButton btn;
        int num;
        Circle applet;
        Thread thread; //method 1
        boolean flag = false; //method 1
        //javax.swing.Timer timer; //method 2
            public static void main(String[] args) {
            Cantainer c=new Cantainer();
            c.setSize(500, 500);
            c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            c.setVisible(true);
        }    public Cantainer() {
            btn=new JButton("submit");
            jtf=new JTextField("20");
            c.setLayout(bL);
            c.add(jtf,BorderLayout.NORTH);
            c.add(btn,BorderLayout.SOUTH);
            btn.addActionListener(this);
            applet = new Circle();
            applet.init();
            c.add(applet, BorderLayout.CENTER);
            //timer = new javax.swing.Timer(2000, new ActionListener() {
            //    public void actionPerformed(ActionEvent e) {
            //        applet.paint(applet.getGraphics());
            //    }
            //}); //method 2
        }
        
        public void actionPerformed(ActionEvent e) {
            stop(); //method 1
            //timer.stop(); //method 2
            try {
                num=Integer.parseInt(jtf.getText());
            } catch (Exception ee) {
                num = 20;
            }
            applet.setR(num);
            applet.repaint(); //调用一下repaint就可以全部清空了
            start(); //method 1
            //timer.start(); //method 2
        }    protected void stop() { //method 1
            while (flag) {
                try {thread.interrupt();
                     Thread.sleep(10);
                } catch (Exception ee) {}
            }
        }    protected void start() { //method 2
            flag = true;
            thread = new Thread() {
                public void run() {
                    while (flag) {
                        //applet.paint(applet.getGraphics());
                        try {
                            sleep(2000);
                        } catch (Exception e) {
                            flag = false; 
                            break;
                        }
                    }
             }
            };
            thread.start();
        }
    }