接着上篇说:
这里我们已经做出了四色板,但是颜色四种颜色是固定的,那么我们能不能让每次运行出来的颜色都不一样呢?
既然想随机颜色,则肯定要用到随机类Random。
在四色板中,我们对四块小画布背景色的设置是使用Color的静态属性来完成的,比如Color.RED,其实我们还可以使用Color类的构造函数来完成:
java.awt.Color:构造方法:
Color(int r,int g,int b):创建具有指定红色、绿色和蓝色值的不透明的 sRGB 颜色,这些值都在 (0 - 255) 的范围内。
知道了这个,我们就能用Random来控制三个int型的参数,来产生不同的颜色了。
- package com.anjoyo.test;
- import java.awt.Color;
- import java.awt.GridLayout;
- import java.util.Random;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- public class Main extends JFrame {
- public Main() {
- // 创建基础画布
- JPanel pnBasic = new JPanel();
- // 创建网站布局格式:2行2列
- GridLayout lyGrid = new GridLayout(2, 2);
- // 将基础画布的布局格式指定为上面定义的布局方式
- pnBasic.setLayout(lyGrid);
- // 将基础画布的背景色设置为绿色GREEN
- // pnBasic.setColor.GREEN);
- Random ran = new Random();
- // 创建红黄蓝绿四块小画布,并分别设置背景色
- JPanel pnRed = new JPanel();
- pnRed.setBackground(new Color(ran.nextInt(256), ran.nextInt(256), ran
- .nextInt(256)));
- JPanel pnYello = new JPanel();
- pnYello.setBackground(new Color(ran.nextInt(256), ran.nextInt(256), ran
- .nextInt(256)));
- JPanel pnBlue = new JPanel();
- pnBlue.setBackground(new Color(ran.nextInt(256), ran.nextInt(256), ran
- .nextInt(256)));
- JPanel pnGreen = new JPanel();
- pnGreen.setBackground(new Color(ran.nextInt(256), ran.nextInt(256), ran
- .nextInt(256)));
- // 将红黄蓝绿四块小画布加入到基础画布中
- pnBasic.add(pnRed);
- pnBasic.add(pnYello);
- pnBasic.add(pnBlue);
- pnBasic.add(pnGreen);
- // 将画板和画布绑定
- setContentPane(pnBasic);
- // 设置默认关闭模式
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // 设置标题栏
- setTitle("我的小窗口");
- // 设置窗口区域(x,y,width,heigth)
- setBounds(200, 200, 400, 300);
- // 设置是否显示
- setVisible(true);
- }
- public static void main(String[] args) {
- new Main();
- }
- }
运行两次,对比效果如下:
可以看出,已经实现了颜色的随机。
下面我们就来实现随机颜色的多色板:以10行10列为例:
项目分析:
1) 既然我们想要10行10列的多色板,那么我们可以先定义两个int型的变量用来放行和列数。
2) 我们的布局不能仍为2行2列了,应该是10行10列了。
3) 10行10列一共100块板,我们不可能一个个的来定义,需要使用数组。
4) 该数组的长度为行和列的乘积。
实现代码如下:
- package com.anjoyo.test;
- import java.awt.Color;
- import java.awt.GridLayout;
- import java.util.Random;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- public class Main extends JFrame {
- public Main() {
- //定义行数和列数
- int niRow = 10;
- int niCol = 10;
- // 创建基础画布
- JPanel pnBasic = new JPanel();
- // 创建网站布局格式:此处变为10行10列
- // 使用变量指明,这样上面指定行数和列数之后下面不需要做其他更改。
- GridLayout lyGrid = new GridLayout(niRow, niCol);
- // 将基础画布的布局格式指定为上面定义的布局方式
- pnBasic.setLayout(lyGrid);
- //随即类
- Random ran = new Random();
- //创建小画布集,数组长度为行和列的乘积。
- JPanel[] pnArr = new JPanel[niRow * niCol];
- for (int i = 0; i < pnArr.length; i++) {
- // 创建每个小画布
- pnArr[i] = new JPanel();
- // 为每一个小画布添加背景色
- pnArr[i].setBackground(new Color(ran.nextInt(256),
- ran.nextInt(256), ran.nextInt(256)));
- // 将每一个小画布加入基础画布中
- pnBasic.add(pnArr[i]);
- }
- // 将画板和画布绑定
- setContentPane(pnBasic);
- // 设置默认关闭模式
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // 设置标题栏
- setTitle("我的小窗口");
- // 设置窗口区域(x,y,width,heigth)
- setBounds(200, 200, 400, 300);
- // 设置是否显示
- setVisible(true);
- }
- public static void main(String[] args) {
- new Main();
- }
- }
运行两次,对比效果如下:
最后再说一点,这里我们可以使用GridLayout的重载的构造函数:
GridLayout(int rows, int cols, int hgap, int vgap):创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。
此外,将水平和垂直间距设置为指定值。比如这里我们设置为new GridLayout(niRow,niCol,5,5);运行效果如下:
这样,多色板就完成了。