// MainFrame类 
import java.awt.BorderLayout; 
import java.awt.EventQueue; 
 
import java.awt.GridLayout;   //网格布局管理器 
 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
 
public class MainFrame extends JFrame { 
 
        private JPanel contentPane; 
 
        /** 
         * Launch the application. 
         */ 
        public static void main(String[] args) { 
                EventQueue.invokeLater(new Runnable() { 
                        public void run() { 
                                try { 
                                        MainFrame frame = new MainFrame(); 
                                        frame.setVisible(true); 
                                } catch (Exception e) { 
                                        e.printStackTrace(); 
                                } 
                        } 
                }); 
        } 
 
        /** 
         * Create the frame. 
         */ 
        public MainFrame() { 
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                setBounds(100, 100, 450, 300); 
                contentPane = new JPanel(); 
                contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
                setContentPane(contentPane); 
                contentPane.setLayout(null); 
                 
                //将当前主窗体设置为9*9的网格布局,分别创建81个彩蛋面板,摆放上去 
                //1. 创建网格布局管理器, 同时指定行和列 
                GridLayout gl = new GridLayout(9, 9); 
                //2. 将当前窗体的内容面板设置为网格布局 
                contentPane.setLayout(gl); 
                 
                //3. 准备81个彩蛋面板 
                OneEggPanel[] egg = new OneEggPanel[81]; 
                 
                //4. 将81个彩蛋面板分别实例化,并添加到窗体的内容面板中 
                for (int i = 0; i < egg.length; i++) { 
                        egg[i] = new OneEggPanel();   //逐个new出蛋 
                        contentPane.add(egg[i]);   //逐个添加到面板中 
                } 
        } 
} 
 
//OneEggPanel类 
import java.util.Random;    
 
import java.awt.Graphics; 
import java.awt.Color; 
 
import javax.swing.JPanel; 
 
//能够绘制出一个蛋的面板 
//继承于JPanel,利用绘图来实现一个蛋的效果 
//同时又实现Runnable接口,来达到具备线程的能力 
public class OneEggPanel extends JPanel implements Runnable{ 
         
        private Random rand;   //声明一个随机数生成器 
        private int sleepTime;   //控制休眠时间 
         
        //构造方法,初始化本类一些成员 
        public OneEggPanel() { 
                rand = new Random();   //new出随机数生成器 
                 
                //随机产生休眠时间 
                sleepTime = Math.abs(rand.nextInt()) % (1000 - 50) + 50; 
                 
                //启动当前的线程,令彩蛋一产生,就会不停地自动变色 
                Thread t = new Thread(this);    //创建线程 
                t.start();    //启动之 
        } 
         
        //重写父类的绘图方法 
        protected void paintComponent(Graphics g) { 
                super.paintComponent(g); 
                 
                //画蛋 
                g.setColor(getRandColor());  //调用自定义的方法,产生随机颜色,令蛋的颜色成为随机 
                //就画当前面板的内切圆 
                int w = this.getWidth(); 
                int h = this.getHeight(); 
                g.fillOval(0, 0, w, h); 
        } 
         
        //自定义一个方法,用于产生随机颜色 
        private Color getRandColor() { 
                //1. 产生三个0~255之间的整数,分别表示rgb三元色的色值 
                int r = Math.abs(rand.nextInt()) % 256; 
                int g = Math.abs(rand.nextInt()) % 256; 
                int b = Math.abs(rand.nextInt()) % 256; 
                 
                //2. 利用这三个随机整数,创建一个Color对象并返回 
                Color c = new Color(r, g, b); 
                 
                return c; 
        } 
         
        //重写Runnable接口中的run方法 
        public void run() { 
                try { 
                        while (true) {    //不断地 
                                Thread.sleep(sleepTime);//设定间隔时间 
                                this.repaint();   //重绘当前面板,彩蛋变色 
                        } 
                } catch (InterruptedException ie) { 
                        ie.printStackTrace(); 
                } 
        } 
} 
 
 
 
 
 
 
 
 |   
        
 
    
    
    
     
 
 |