java画图支持的颜色_Java关于画图工具常用颜色预留区的颜色添加

为了加深对面向对象编程的理解,我希望通过使用swing包和awt包的类实例化对象,去加深面向对象这个概念。于是想编写一个简易的画图工具。

20180518011521243673.png

目前实现的功能相对简单,工具栏共有五个功能面板,分别是:图形选择、选择前景色、选择背景色、常用颜色选择、编辑颜色。

我们都知道,windows自带的常用颜色选择面板最下面一行预留了可以自定义添加颜色的空白格。

20180518011521311058.png

这一行可以通过右侧的编辑颜色按钮所弹出的颜色选择器来添加想要的颜色,每添加一次,就会增加一个颜色

20180518011521404812.png

可是预留的位置只有十个,那么如果填满之后再次添加会发生什么呢?

20180518011521443876.png

这时,预留区已经添加满了10个,我们再添加一次

20180518011521491729.png

我们发现,最早添加的颜色被挤掉,而十个预留框的第一个框是我们第二个加的颜色,第二个框是我们第三个加的颜色,以此类推,第十个框是我们第十一次,也就是最新一次添加的颜色。那么,这种情况要怎么实现呢?(当然,现在接触过数据结构之后发现这个问题可以用队列很好的解决)

首先

我们为预留区建了一个JLabel类型的数组,用于存放十个预留区

JLabel[] arrayLabel = new JLabel[10];

在前十次我们只需要得到颜色编辑器所选择的颜色,将标签的背景颜色设置为该颜色即可。

我们为编辑颜色按钮加上一个监听器,该监听器实现ActionListener,在点击按钮时,调用JColorChooser的静态方法showDialog即可获得一个颜色(该方法返回选中的颜色)

Color c = JColorChooser.showDialog(null, "颜色编辑器", Color.BLACK);

得到颜色后,就是设置背景颜色了

1 int i = 0;定义一个计数变量i,用于记录Label数组下标索引2 if (i < 10) {3 array[i].setBackground(c);//将标签背景颜色设置为c

4 array[i].setOpaque(true);//将标签设置为背景颜色可见

5 i++;//每设置一次就加一,使得下一次设置的是下一个

6 }

而在10次之后,我们就需要做出一些改变。

在我编写这个程序的时候,我是这样想的。

20180518011521521027.png

图中所示为用于存放的颜色的数组

考虑到图片尺寸大小,我们以一个长度为5的数组来演示。

我们将前5个颜色用12345表示,将新颜色用6表示

因为需要用到之前的颜色,所以我们其实在设置之前的颜色时,可以加一行代码,将颜色存到一个颜色数组中

所以,我们将之前的代码修改为:

1 if (i < 10) {2 cFinal[i]=c;//用于存储颜色的数组3 array[i].setBackground(c);4 array[i].setOpaque(true);5 i++;6 }

在新添加颜色时,我们首先需要将之前的数组元素,错位赋值给一个新的中间数组,再将中间数组的元素一一重新赋给颜色数组,并将最后一个改为新获得的颜色,用代码实现就是

1 for(int j = 0 ; j<9 ; j++) {2 cReplace[j]=cFinal[j+1];3 cFinal[j]=cReplace[j];4 }5 cFinal[9]=c;

这样我们就得到了最终给Label设置背景颜色的颜色数组

之后就很简单了

1 for(int n = 0 ;n<10;n++) {2 array[n].setBackground(cFinal[n]);3 }

这样,我们就重新给标签数组设置了新的背景颜色

20180518011521604038.png

新加颜色之后

20180518011521658728.png

其实在之后了解到队列的概念后,觉得这个方法就很蠢了,不过在初学之时的一些想法,我仍想把它记录下来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值