// 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();
}
}
}
|
|