java-RGB調(diào)色面板的實(shí)現(xiàn)(事件監(jiān)聽(tīng)器之匿名內(nèi)部類(lèi))
題目要求:
要求寫(xiě)一個(gè)案例,使用三個(gè)JSlider分別選取R、G、B三原色的值,用戶(hù)可以通過(guò)活動(dòng)JSlider的滑塊來(lái)動(dòng)態(tài)的合成一種顏色,合成的顏色顯示在界面上。
代碼思路解析:
1、所需要的組件
(1)JFrame窗口
(2)JLabel的RGB標(biāo)簽文字組件
(3)JTextField顏色變動(dòng)的數(shù)值
(4)JSlider顏色交換的滑塊組件
(5)JTextArea顏色顯示區(qū)域
2、構(gòu)造方法中將JFrame、JSlider、JTextField、JTextArea組件全部實(shí)例化
3、另寫(xiě)一個(gè)方法將創(chuàng)建的所有的組件添加到相應(yīng)的面板中去,布局采用的是swing包中JPanel組件面板BorderLayout(東西南北中)的模式,用其中的東與中面板,其他的不寫(xiě)
4、最重要的一步,我這里采用的是匿名內(nèi)部類(lèi)的方法獨(dú)立寫(xiě)了一個(gè)方法添加的時(shí)間監(jiān)聽(tīng)器,具體寫(xiě)法看代碼
5、寫(xiě)一個(gè)方法將最外層的面板的尺寸,關(guān)閉窗口,還有最重要的關(guān)閉窗口setVisible(true),具體解釋如下:
setVisible(true);方法的意思是說(shuō)數(shù)據(jù)模型已經(jīng)構(gòu)造好了,允許JVM可以根據(jù)數(shù)據(jù)模型執(zhí)行paint方法開(kāi)始畫(huà)圖并顯示到屏幕上了,并不是顯示圖形,而是可以運(yùn)行開(kāi)始畫(huà)圖了。這個(gè)方法和java多線(xiàn)程的start方法有點(diǎn)異曲同工之妙,start方式是允許run方法運(yùn)行了,start方法和setVisible方法很相似。
6、將寫(xiě)的方法全部寫(xiě)到構(gòu)造方法的末尾,記住一點(diǎn)順序最重要,順序如下:
7、將組件添加到面板才能調(diào)用時(shí)間監(jiān)聽(tīng)器方法,否則后果自己看。
8、最后一步,在主方法中將所有方法都放在構(gòu)造方法進(jìn)行實(shí)例化創(chuàng)建對(duì)象即可完成
具體代碼如下:
package create; import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class ZuoYe { private JFrame jf; private JLabel label1, label2, label3; private JSlider slider1, slider2, slider3; private JTextField field1, field2, field3; private JTextArea jta; public ZuoYe() { jf = new JFrame(); label1 = new JLabel("R:"); label2 = new JLabel("\n G:"); label3 = new JLabel("B:"); slider1 = new JSlider(0, 255, 127); slider2 = new JSlider(0, 255, 127); slider3 = new JSlider(0, 255, 127); field1 = new JTextField("127"); field2 = new JTextField("127"); field3 = new JTextField("127"); field1.setEditable(false); field2.setEditable(false); field3.setEditable(false); jta = new JTextArea(5, 10); jta.setEditable(false); jta.setBackground(new Color(127, 127, 127)); init(); showMe(); addEventHandler(); } public void init() { JPanel jp1 = new JPanel(); jp1.add(label1); jp1.add(slider1); jp1.add(field1); jp1.add(label2); jp1.add(slider2); jp1.add(field2); jp1.add(label3); jp1.add(slider3); jp1.add(field3); JPanel jp2 = new JPanel(); jp2.add(jta); jf.add(jp1, BorderLayout.CENTER); jf.add(jp2, BorderLayout.EAST); jf.setVisible(true); } public void showMe() { jf.setSize(400, 200); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void addEventHandler() { ChangeListener lis = new ChangeListener() { public void stateChanged(ChangeEvent arg0) { int r = slider1.getValue(); int g = slider2.getValue(); int b = slider3.getValue(); field1.setText(r + ""); field2.setText(g + ""); field3.setText(b + ""); Color c = new Color(r, g, b); jta.setBackground(c); } }; slider1.addChangeListener(lis); slider2.addChangeListener(lis); slider3.addChangeListener(lis); } public static void main(String[] args) { //構(gòu)造方法這樣寫(xiě)調(diào)用對(duì)象,不用構(gòu)造對(duì)象去調(diào)用方法,構(gòu)造方法中末尾已經(jīng)寫(xiě)過(guò)其他的方法 ZuoYe ts = new ZuoYe(); // ts.showMe(); // ts.init(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java開(kāi)發(fā)gui教程之jframe監(jiān)聽(tīng)窗體大小變化事件和jframe創(chuàng)建窗體
- Java添加事件監(jiān)聽(tīng)的四種方法代碼實(shí)例
- JAVA用戶(hù)自定義事件監(jiān)聽(tīng)實(shí)例代碼
- JavaFX 監(jiān)聽(tīng)窗口關(guān)閉事件實(shí)例詳解
- Java Swing中JList選擇事件監(jiān)聽(tīng)器ListSelectionListener用法示例
- java實(shí)現(xiàn)table添加右鍵點(diǎn)擊事件監(jiān)聽(tīng)操作示例
- Java事件監(jiān)聽(tīng)機(jī)制講解
- java中接口和事件監(jiān)聽(tīng)器的深入理解
- Java基礎(chǔ)學(xué)習(xí)之Swing事件監(jiān)聽(tīng)
- Java?Spring?事件監(jiān)聽(tīng)詳情解析
相關(guān)文章
java狀態(tài)機(jī)方案解決訂單狀態(tài)扭轉(zhuǎn)示例詳解
這篇文章主要為大家介紹了java狀態(tài)機(jī)方案解決訂單狀態(tài)扭轉(zhuǎn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Mybatis和orcale update語(yǔ)句中接收參數(shù)為對(duì)象的實(shí)例代碼
Mybatis的 mapper.xml 中 update 語(yǔ)句使用 if 標(biāo)簽判斷對(duì)像屬性是否為空值。本文重點(diǎn)給大家介紹Mybatis和orcale update語(yǔ)句中接收參數(shù)為對(duì)象的實(shí)例代碼,需要的朋友參考下吧2017-09-09Java隨機(jī)數(shù)算法原理與實(shí)現(xiàn)方法實(shí)例詳解
這篇文章主要介紹了Java隨機(jī)數(shù)算法原理與實(shí)現(xiàn)方法,簡(jiǎn)單分析了隨機(jī)數(shù)算法的原理并結(jié)合具體實(shí)例形式給出了java編程計(jì)算隨機(jī)數(shù)的具體操作技巧,需要的朋友可以參考下2017-09-09java開(kāi)發(fā)CPU流水線(xiàn)與指令亂序執(zhí)行詳解
這篇文章主要為大家介紹了java開(kāi)發(fā)CPU流水線(xiàn)與指令亂序執(zhí)行詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Spring?Native打包本地鏡像的操作方法(無(wú)需通過(guò)Graal的maven插件buildtools)
這篇文章主要介紹了Spring?Native打包本地鏡像,無(wú)需通過(guò)Graal的maven插件buildtools,本文探索一下,如果不通過(guò)這個(gè)插件來(lái)生成鏡像,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02springboot整合shiro之thymeleaf使用shiro標(biāo)簽的方法
Thymeleaf 是一個(gè)跟 Velocity、FreeMarker 類(lèi)似的模板引擎,它可以完全替代 JSP ,這篇文章主要介紹了springboot整合shiro之thymeleaf使用shiro標(biāo)簽的相關(guān)知識(shí),需要的朋友可以參考下2021-10-10