成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

比較Java Swing中三種注冊(cè)事件的方法

開發(fā) 后端
Swing 是目前Java中不可缺少的窗口工具組,是建立圖形化用戶界面(GUI)程序的強(qiáng)大工具。Java Swing組件自動(dòng)產(chǎn)生各種事件來響應(yīng)用戶行為。Java將事件封裝成事件類,并且為每個(gè)事件類定義了一個(gè)事件監(jiān)聽器。

Swing 是目前Java中不可缺少的窗口工具組,是建立圖形化用戶界面(GUI)程序的強(qiáng)大工具。Java Swing組件自動(dòng)產(chǎn)生各種事件來響應(yīng)用戶行為。Java將事件封裝成事件類,并且為每個(gè)事件類定義了一個(gè)事件監(jiān)聽器。一個(gè)組件注冊(cè)事件監(jiān)聽器方法,表明該組件要響應(yīng)指定事件。也就是說我們可以通過注冊(cè)監(jiān)聽器,監(jiān)聽事件源產(chǎn)生的事件,從而在事件處理程序中處理我們所需要處理的用戶行為。

Java Swing中處理各組件事件的一般步驟是:

1. 新建一個(gè)組件。

2. 將該組件添加到相應(yīng)的面板。

3. 注冊(cè)監(jiān)聽器以監(jiān)聽事件源產(chǎn)生的事件

4. 定義處理事件的方法。

注冊(cè)事件我們一般采用兩種方式:一是:利用一個(gè)監(jiān)聽器以及多個(gè)if語句來決定是哪個(gè)組件產(chǎn)生的事件;二是使用多個(gè)內(nèi)部類來響應(yīng)不同組件產(chǎn)生的各種事件,它又分兩種方式,一種是采用匿名內(nèi)部類,一種是采用一般內(nèi)部類。

下面我們采用以上三種方式來注冊(cè)事件。來說明以上三種方式是如何實(shí)現(xiàn)事件的處理方法。

一、采用一個(gè)監(jiān)聽器多個(gè)if語句來實(shí)現(xiàn)

在這種方式下:我們要繼承ActionListener接口,并且要實(shí)現(xiàn)actionPerformed方法。通過getActionCommand()方法來獲取事件的事件源。

  1. public class Test_01 extends JFrame implements ActionListener {
  2. Test_01() {
  3. JPanel panel = new JPanel();
  4. JButton button1 = new JButton("按鈕一");
  5. JButton button2 = new JButton("按鈕二");
  6. panel.add(button1);
  7. panel.add(button2);
  8. this.getContentPane().add(panel);
  9. this.setVisible(true);
  10. button1.addActionListener(this);
  11. button2.addActionListener(this);
  12. }
  13. public void actionPerformed(ActionEvent e) {
  14. String source = e.getActionCommand();
  15. if (source.equals("按鈕一")) {
  16. System.out.println("你按了按鈕一");
  17. }
  18. if (source.equals("按鈕二")) {
  19. System.out.println("你按了按鈕二");
  20. }
  21. }
  22. public static void main(String args[]) {
  23. new Test_01();
  24. }
  25. }

利用一個(gè)監(jiān)聽器來處理事件的缺點(diǎn)是:其實(shí)當(dāng)處理的事件比較少的時(shí)候,這種方式還是一種比較好的方式,它簡單。當(dāng)程序比較復(fù)雜時(shí),需要一大串的if語句來實(shí)現(xiàn)。程序的代碼比較難閱讀和維護(hù)。

二、利用匿名內(nèi)部類來是實(shí)現(xiàn)

  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.     }  

使用匿名內(nèi)部類來實(shí)現(xiàn)可以解決使用if來獲取事件源帶來的麻煩。但是使用匿名內(nèi)部類同樣存在著一些問題。由于它是和事件組一起的。根據(jù)事件組在代碼中的位置不同,類的定義以及處理事件,同樣不便于閱讀。如果事件處理程序比較復(fù)雜,內(nèi)部類中的代碼就會(huì)變的很長。

三、利用一般內(nèi)部類來實(shí)現(xiàn)

  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.  

利用一般內(nèi)部類我們可以解決很多的問題,該方法避免了第二種方法中由于使用匿名內(nèi)部類而導(dǎo)致的代碼混亂。它把所有的事件處理方法都集中在一塊,并且都具有有意義的名稱,程序非常容易閱讀與維護(hù)。單個(gè)的事件處理程序也可以被工具欄、菜單欄等重復(fù)使用。

基于上面的總結(jié),我們一般采用第三種方法來注冊(cè)事件。

原文鏈接:http://blog.csdn.net/chenssy/article/details/7392490

【編輯推薦】

  1. 談?wù)凧ava的自動(dòng)裝箱和拆箱
  2. 如何進(jìn)行Java EE性能測(cè)試與調(diào)優(yōu)
  3. Java通過SSH2協(xié)議運(yùn)行遠(yuǎn)程程序
  4. Java Bean屬性命名規(guī)范問題分析
  5. Java Socket編程:初識(shí)TCP Socket
責(zé)任編輯:林師授 來源: chenssy的博客
相關(guān)推薦

2009-06-09 16:53:22

Java Swing處理方法比較

2009-07-16 16:23:59

Swing線程

2017-01-05 16:19:12

C++正則表達(dá)式

2010-07-19 14:43:21

SQL Server查

2018-01-17 15:02:28

VMware網(wǎng)絡(luò)連接

2010-07-07 09:14:35

SQL Server數(shù)

2020-11-01 17:10:46

異步事件開發(fā)前端

2009-07-30 16:27:33

C#比較時(shí)間

2009-07-01 17:22:05

連接字符串

2009-07-10 11:45:44

Java Swing

2021-11-29 06:57:50

App使用屬性

2010-06-28 17:43:44

SQL Server

2024-04-24 14:46:40

人工智能編碼助手

2017-06-09 06:29:24

數(shù)據(jù)中心服務(wù)器超融合

2021-11-11 11:24:54

JavaScript模型事件

2025-03-19 10:22:09

JavaScript編程語言開發(fā)

2012-08-07 10:02:06

JSP

2014-07-30 17:10:38

LVS集群負(fù)載均衡

2009-07-03 18:32:18

JSP頁面跳轉(zhuǎn)

2009-07-08 12:56:32

編寫Servlet
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线观看av中文字幕 | 四虎影院新地址 | 亚洲视频一区在线观看 | 国产精品亚洲一区二区三区在线观看 | 国产农村妇女毛片精品久久麻豆 | 中国av在线免费观看 | 国产精品成av人在线视午夜片 | 婷婷成人在线 | 精品网| 成人免费视频网站在线观看 | 精品久久久久久国产 | 日本高清精品 | 国产精品毛片无码 | 成人免费小视频 | 国产精品永久 | 成年视频在线观看 | 亚洲成在线观看 | 欧美 日韩 国产 成人 在线 | 国产精品美女在线观看 | 成人免费av在线 | 综合网中文字幕 | 亚洲日韩中文字幕一区 | 九九热精品视频 | 毛片一级片| 亚洲一区 中文字幕 | 中文字幕视频在线 | 国产精品99久久久久久久久久久久 | 成人久久久久久久久 | 久久精品国产一区二区三区不卡 | 日韩欧美手机在线 | 精久久久| 久久久tv| 日韩成人在线视频 | av一区二区三区 | 国产精品久久久久久一区二区三区 | 激情免费视频 | 五月天综合影院 | 99精品一区二区 | 都市激情亚洲 | 欧美男人天堂 | 日韩一区二区三区在线视频 |