比較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的方法比較JS
- js 註冊事件的兩種方式詳解,傳統註冊事件與方法監聽註冊事件(addEventListener)JS事件dev
- Java中三種常用的排序方法Java排序
- C++ 中三種正規表示式比較C++
- 一種非明碼比較程式的註冊------NS-SHAFT註冊碼破解 (9千字)
- 迴圈註冊事件的幾種寫法事件
- 分散式中幾種服務註冊與發現元件的原理與比較分散式元件
- 分割陣列的幾種方法比較陣列
- 四種在Javascript比較物件的方法JavaScript物件
- 在java中進行日期時間比較的4種方法Java
- 幾種任務排程的 Java 實現方法與比較Java
- Java解析XML學習筆記1 – 四種方法比較JavaXML筆記
- ORACLE批次更新四種方法比較Oracle
- python清空字典的兩種方法比較Python
- 去除csdn廣告的方法,多種方法比較總結
- Java Web開發Tomcat中三種部署專案的方法JavaWebTomcat
- java中四種操作xml方式的比較JavaXML
- jquery註冊事件處理函式常用的幾種方式jQuery事件函式
- js 註冊事件物件JS事件物件
- ABAP, Java和JavaScript三種語言的比較JavaScript
- 幾種排序的比較排序
- UITableView設定全屏分隔線的幾種方法比較UIView
- 註冊客戶端事件客戶端事件
- C++ 中三種正規表示式比較(C regex,C ++regex,boost regex)C++
- Java幾種常用JSON庫效能比較JavaJSON
- 比較全的oracle事件解釋Oracle事件
- 在tomcat中三種部署專案的方法Tomcat
- hiformance註冊教程及優惠碼,近期比較火的超低價VPSORM
- SWing事件呼叫事件
- Java中的幾種Kafka客戶端比較介紹JavaKafka客戶端
- java集合遍歷的幾種方式總結及比較Java
- 執行緒等待兩種方法的喚醒的效率比較執行緒
- IBM實驗室對SWT, Swing 和 AWT 的特徵比較IBM特徵
- 『凌雲郵神』 註冊碼破解 (非明碼比較的哦 ^_^) (6千字)
- Java 比較器Java
- JAVA字串比較Java字串
- 元素水平垂直居中三種方法實現
- react中三種函式呼叫方法總結React函式