Java關於畫圖工具常用顏色預留區的顏色添加
為了加深對面向對象編程的理解,我希望通過使用swing包和awt包的類實例化對象,去加深面向對象這個概念。於是想編寫一個簡易的畫圖工具。
目前實現的功能相對簡單,工具欄共有五個功能面板,分別是:圖形選擇、選擇前景色、選擇背景色、常用顏色選擇、編輯顏色。
我們都知道,windows自帶的常用顏色選擇面板最下面一行預留了可以自定義添加顏色的空白格。
這一行可以通過右側的編輯顏色按鈕所彈出的顏色選擇器來添加想要的顏色,每添加一次,就會增加一個顏色
可是預留的位置只有十個,那麽如果填滿之後再次添加會發生什麽呢?
這時,預留區已經添加滿了10個,我們再添加一次
我們發現,最早添加的顏色被擠掉,而十個預留框的第一個框是我們第二個加的顏色,第二個框是我們第三個加的顏色,以此類推,第十個框是我們第十一次,也就是最新一次添加的顏色。那麽,這種情況要怎麽實現呢?(當然,現在接觸過數據結構之後發現這個問題可以用隊列很好的解決)
首先
我們為預留區建了一個JLabel類型的數組,用於存放十個預留區
JLabel[] arrayLabel = new JLabel[10];
在前十次我們只需要得到顏色編輯器所選擇的顏色,將標簽的背景顏色設置為該顏色即可。
我們為編輯顏色按鈕加上一個監聽器,該監聽器實現ActionListener,在點擊按鈕時,調用JColorChooser的靜態方法showDialog即可獲得一個顏色(該方法返回選中的顏色)
Color c = JColorChooser.showDialog(null, "顏色編輯器", Color.BLACK);
得到顏色後,就是設置背景顏色了
1 inti = 0;定義一個計數變量i,用於記錄Label數組下標索引 2 if (i < 10) { 3 array[i].setBackground(c);//將標簽背景顏色設置為c 4 array[i].setOpaque(true);//將標簽設置為背景顏色可見 5 i++;//每設置一次就加一,使得下一次設置的是下一個 6 }
而在10次之後,我們就需要做出一些改變。
在我編寫這個程序的時候,我是這樣想的。
圖中所示為用於存放的顏色的數組
考慮到圖片尺寸大小,我們以一個長度為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 }
這樣,我們就重新給標簽數組設置了新的背景顏色
新加顏色之後
其實在之後了解到隊列的概念後,覺得這個方法就很蠢了,不過在初學之時的一些想法,我仍想把它記錄下來。
Java關於畫圖工具常用顏色預留區的顏色添加