比較Java Swing中三種註冊事件的方法
Swing 是目前Java中不可缺少的視窗工具組,是建立圖形化使用者介面(GUI)程式的強大工具。Java Swing元件自動產生各種事件來響應使用者行為。Java將事件封裝成事件類,並且為每個事件類定義了一個事件監聽器。一個元件註冊事件監聽器方法,表明該元件要響應指定事件。也就是說我們可以通過註冊監聽器,監聽事件源產生的事件,從而在事件處理程式中處理我們所需要處理的使用者行為。
Java Swing中處理各元件事件的一般步驟是:
1. 新建一個元件。
2. 將該元件新增到相應的皮膚。
3. 註冊監聽器以監聽事件源產生的事件
4. 定義處理事件的方法。
註冊事件我們一般採用兩種方式:
一:利用一個監聽器以及多個if語句來決定是哪個元件產生的事件;
二:使用多個內部類來響應不同元件產生的各種事件,它又分兩種方式,一種是採用匿名內部類,一種是採用一般內部類。
下面我們採用以上三種方式來註冊事件。來說明以上三種方式是如何實現事件的處理方法。
一、採用一個監聽器多個if語句來實現
在這種方式下:我們要繼承ActionListener介面,並且要實現actionPerformed方法。通過getActionCommand()方法來獲取事件的事件源。
1 public class Test_01 extends JFrame implements ActionListener { 2 3 Test_01() { 4 JPanel panel = new JPanel(); 5 JButton button1 = new JButton("按鈕一"); 6 JButton button2 = new JButton("按鈕二"); 7 8 panel.add(button1); 9 panel.add(button2);10 this.getContentPane().add(panel);11 this.setVisible(true);12 13 button1.addActionListener(this);14 button2.addActionListener(this);15 16 }17 18 public void actionPerformed(ActionEvent e) {19 String source = e.getActionCommand();20 if (source.equals("按鈕一")) {21 System.out.println("你按了按鈕一");22 }23 if (source.equals("按鈕二")) {24 System.out.println("你按了按鈕二");25 }26 }27 28 public static void main(String args[]) {29 new Test_01();30 31 }32 }
利用一個監聽器來處理事件的缺點是:其實當處理的事件比較少的時候,這種方式還是一種比較好的方式,它簡單。當程式比較複雜時,需要一大串的if語句來實現。程式的程式碼比較難閱讀和維護。
一、利用匿名內部類來是實現
使用匿名內部類來實現可以解決使用if來獲取事件源帶來的麻煩。但是使用匿名內部類同樣存在著一些問題。由於它是和事件組一起的。根據事件組在程式碼中的位置不同,類的定義以及處理事件,同樣不便於閱讀。如果事件處理程式比較複雜,內部類中的程式碼就會變的很長。
1 public class Test_02 extends JFrame{ 2 3 Test_02(){ 4 JPanel panel = new JPanel(); 5 JButton button1 = new JButton("按鈕一"); 6 JButton button2 = new JButton("按鈕二"); 7 8 panel.add(button1); 9 panel.add(button2);10 this.getContentPane().add(panel);11 this.setVisible(true);12 13 button1.addActionListener(14 new ActionListener(){15 public void actionPerformed(ActionEvent e) {16 System.out.println("你按了按鈕一");17 }18 });19 button2.addActionListener(20 new ActionListener(){21 public void actionPerformed(ActionEvent e) {22 System.out.println("你按了按鈕二");23 }24 });25 }26 27 public static void main(String args[]){28 new Test_02();29 }30 }
三、利用一般內部類來實現
1 public class Test_03 extends JFrame{ 2 3 Test_03(){ 4 JPanel panel = new JPanel(); 5 JButton button1 = new JButton("按鈕一"); 6 JButton button2 = new JButton("按鈕二"); 7 8 panel.add(button1); 9 panel.add(button2);10 this.getContentPane().add(panel);11 this.setVisible(true);12 13 button1.addActionListener(new Button1ActionListener());14 button2.addActionListener(new Button2ActionListener());15 16 }17 18 private class Button1ActionListener implements ActionListener{19 public void actionPerformed(ActionEvent e) {20 System.out.println("你按了按鈕一"); 21 } 22 }23 24 private class Button2ActionListener implements ActionListener{25 public void actionPerformed(ActionEvent e) {26 System.out.println("你按了按鈕二"); 27 } 28 }29 30 public static void main(String[] args) {31 new Test_03();32 }33 34 }
利用一般內部類我們可以解決很多的問題,該方法避免了第二種方法中由於使用匿名內部類而導致的程式碼混亂。它把所有的事件處理方法都集中在一塊,並且都具有有意義的名稱,程式非常容易閱讀與維護。單個的事件處理程式也可以被工具欄、選單欄等重複使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989885/viewspace-2745159/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js 註冊事件的兩種方式詳解,傳統註冊事件與方法監聽註冊事件(addEventListener)JS事件dev
- 分散式中幾種服務註冊與發現元件的原理與比較分散式元件
- 在java中進行日期時間比較的4種方法Java
- 分割陣列的幾種方法比較陣列
- 四種在Javascript比較物件的方法JavaScript物件
- 去除csdn廣告的方法,多種方法比較總結
- Java幾種常用JSON庫效能比較JavaJSON
- 事件註冊與事件代理學習事件
- 幾種排序的比較排序
- hiformance註冊教程及優惠碼,近期比較火的超低價VPSORM
- python執行系統命令四種方法比較Python
- Java中的幾種Kafka客戶端比較介紹JavaKafka客戶端
- ==和equals方法的比較
- DDD中事件與命令比較事件
- Java Optional的orElse()與orElseGet()兩個方法比較 - BaeldungJava
- Java的BigDecimal比較大小JavaDecimal
- 元素水平垂直居中三種方法實現
- pl/sql中三種遊標迴圈效率對比SQL
- Java 比較器Java
- HTTP方法之@RequestMapping與Spring組合註解比較 - RahulHTTPAPPSpring
- spring註冊bean的幾種方式SpringBean
- 事件風暴與領域故事的比較事件
- 優雅的在React元件中註冊事件React元件事件
- Nacos - 事件的註冊、取消與監聽(EventDispatcher)事件
- 技術分享| 分散式系統中服務註冊發現元件的原理及比較分散式元件
- 實現類的註冊方法
- JavaScript 註冊事件處理函式JavaScript事件函式
- 分散式註冊中心對比分散式
- java比較日期大小Java
- Java和JavaSciprt比較Java
- java--BEAN比較JavaBean
- initialize方法與load方法比較
- 幾種中文字型的比較
- 【MyBatis】幾種批量插入效率的比較MyBatis
- Java的幾種建立例項方法的效能對比Java
- 實現比較通用的DOM事件掛載、事件解除安裝(相容)事件
- Cesium 比較常用的幾個方法
- jQuery的prop和attr方法比較jQuery