1. 程式人生 > >實現事件監聽器物件的幾種形式:

實現事件監聽器物件的幾種形式:

事件監聽器是一個特殊的java物件,實現事件監聽器物件有如下幾種形式:
內部類形式:將事件監聽器定義為當前類的內部類(如前面示例程式都是內部類的形式)
外部類形式:將事件監聽器定義成一個外部類
類本身作為事件監聽器類:讓當前類本身實現監聽器介面或繼承事件介面卡
匿名內部類形式:使用匿名內部類建立監聽器物件。

——————————————————————————————————————————————

使用外部類實現監聽器:
使用外部類實現監聽器比較少見,主要有兩個原因:
(1)事件監聽器通常屬於特定的GUI頁面,定義成外部類不利於提高程式的內聚性
(2)外部類形式的監聽器不能自由訪問多個GUI介面類的元件,程式設計不夠簡潔。

但是,當某個事件監聽器確實需要被多個GUI介面所共享,而且主要是完成某種業務邏輯的實現,則可以考慮使用外部類的形式定義事件監聽器。

//下面程式定義了一個外部類作為事件監聽器類,該事件監聽器類實現了傳送郵件的功能:

package com.zou;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MailerListener implements ActionListener { 
    private TextField mailAdress; 

    public
MailerListener() {} public MailerListener(TextField mailAdress) { this.mailAdress = mailAdress; } public TextField getMailAdress() { return mailAdress; } public void setMailAdress(TextField mailAdress) { this.mailAdress = mailAdress; } @Override
public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.out.println("sending mail to '" + mailAdress.getText() + ".'\n"); } }
//下面程式使用了該事件監聽器來監聽視窗中的按鈕(把這兩部分程式碼放在同一個包下)

package com.zou;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AwtTest extends WindowAdapter { // 類自己監聽自己的元件 

    @Override 
    public void windowClosing(WindowEvent e) { 
        // TODO Auto-generated method stub 
        // super.windowClosing(e); 
        System.exit(0); 
    } 

    public void init() { 
        Frame f = new Frame("Sending Mail Test"); 
        TextField tf = new TextField(40); 
        Button btn = new Button("send"); 

        f.addWindowListener(this); 
        btn.addActionListener(new MailerListener(tf)); 

        f.add(tf); 
        f.add(btn, BorderLayout.SOUTH); 

        f.pack(); 
        f.setVisible(true); 
    } 

    public static void main(String[] args) { 
        new AwtTest().init(); 
    } 

} 

類 本身作為事件監聽器類:
類本身作為事件監聽器類這種形式使用GUI介面類直接作為監聽器類,可以直接在GUI介面類中定義事件處理器方法,這種方式比較簡潔,是早期AWT程式設計喜歡採用的形式,但是這種方式有兩個缺點:
a.這種形式可能造成混亂的程式結構,GUI介面的主要職責是完成介面的初始化工作,所以降低了程式的可讀性
b.如果GUI介面類需要繼承事件介面卡,將會導致該GUI介面類不能繼承其他父類。

//下面程式使用GUI介面類作為事件監聽器類:
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//GUI介面類繼承WindowAdapter作為介面監聽器類
public class SimpleEventHandler extends WindowAdapter{
Frame f=new Frame(“類本身事件監聽器”);
TextArea ta=new TextArea(6,60);
public void init(){
//將該類的預設物件作為事件監聽器物件
f.addWindowListener(this);
f.add(ta);
f.pack();
f.setVisible(true);

 }

 //GUI介面直接包含事件處理器方法
 public void windowClosing(WindowEvent e){
       System.out.println("使用者關閉視窗");
       System.exit(0);
 }
 public static void main(String[] args){
       new SimpleEventHandler().init();
 }

}

匿名內部類實現監聽器:
(1)大部分時候, 事件處理器都沒有複用價值(可複用程式碼通常會抽象成業務邏輯方法),因此大部分事件監聽器只是臨時使用一次,所以使用匿名內部類形式的事件監聽器更加合適。實際上,這是目前使用最廣泛的事件監聽器形式。

示例程式碼:

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class AnonymousEventHandler{
     Frame f = new Frame("測試");
     TextArea ta=new TextArea(6,40);
     public void init(){
           //以匿名內部類形式建立事件監聽器物件
           f.addWindowListener(new WindowAdapter() {
                //實現事件處理方法
                public void windowClosing(WindowEvent e){
                     System.out.println("使用者試圖關閉視窗");
                     System.exit(0);

                }
           });
           f.add(ta);
           f.pack();
           f.setVisible(true);
     }
     public static void main(String[] args){
           new AnonymousEventHandler().init();
     }
}


相關推薦

實現事件監聽器物件形式

事件監聽器是一個特殊的java物件,實現事件監聽器物件有如下幾種形式: 內部類形式:將事件監聽器定義為當前類的內部類(如前面示例程式都是內部類的形式) 外部類形式:將事件監聽器定義成一個外部類 類本身作為事件監聽器類:讓當前類本身實現監聽器介面或繼承事件介

Android 實現事件監聽器的五處理方法

在Android 應用開發過程中,常用監聽事件如下: (1) ListView事件監聽 setOn ItemSelectedListener:滑鼠滾動時觸發 setOnItemClickListener: 點選時觸發 (2 )EditText 事件監聽 setOnKeyListe

設計模式之單例模式【內附物件例項化方式、實現執行緒安全方式】

繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)

Nginx實現負載均衡的方式

要理解負載均衡,必須先搞清楚正向代理和反向代理。 注: 正向代理,代理的是使用者。 反向代理,代理的是伺服器 什麼是負載均衡 當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗

Java事件處理機制-事件監聽器的四實現方式

自身類作為事件監聽器 : Java程式碼: import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  *Java事件處理機制:自身類作為事件監聽器  *@author Winty([ema

事件處理之二點選事件監聽器的五寫法

首選方法二! 方法一:寫一個內部類,在類中實現點選事件 1、在父類中呼叫點選事件 bt_dail.setOnClickListener(new MyButtonListener()); 2、建立內部類 private class MyButtonListener

多線程有實現方法?同步有實現方法?(被問到)

所有 正在 () read 異常 同步 -h 競爭 sync 多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口 同步的實現方面有兩種,分別是synchronized,wait與notify wait():使一個線程處於等待狀態,並且釋放所持有的對象的

DIV實現垂直居中的方法

水平居中 好的 parent 間接 z-index -c 實現 解決 ble 說道垂直居中,我們首先想到的是vertical-align屬性,但是許多時候該屬性並不起作用。例如,下面的樣式並不能達到內容垂直居中顯示 1 div { 2 width:200px;

js中常用追加元素的方法append,appendTo,after,before,insertAfter,insertBefore,appendChild

pre gre con 常用 align lin width insert rip js中常用追加元素的幾種方法,點擊下面每個按鈕,即可查看效果 我是第一個子元素 我是第二個子元素 append appendTo prepend prependTo a

PHP實現定時任務的方式

選項 等待 process 一個 temp 表示 服務器 實現 ref 關於定時任務,之前以前認識了一種最常用的:crontab定時任務。通過linux的定時任務去實現。今天又認識了一下php實現定時方式的其它方式,總結一下。 一 服務器定時任務 服務器定時任務,其實就是u

JSON與Javabean轉換的形式

img 之一 keys open isp println 轉換成 hang zha JSON格式的數據傳遞是最常用的方法之一,以下列出了常用的幾種形態以及與Javabean之間的轉換:   String json1="{‘name‘:‘zhangsan‘,‘age‘

javascript實現異步的方法(一)

.com 順序 單線程 -s .html done 耦合 ogr nbsp 你可能知道,Javascript語言的執行環境是"單線程"(single thread)。 所謂"單線程",就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行後面一個任

Nim函數調用的形式

soft comm right span line ica 寫法 border 很好 Nim函數調用的幾種形式Nim轉載條件:如果你需要轉載本文,你需要做到完整轉載本文所有的內容,不得刪改文內的作者名字與鏈接。否則拒絕轉載。 關於nim的例行介紹: Nim 是一門靜態編

express中 獲取參數的形式

配置 code ram 模式 支持 nbsp 前後端分離 json 處理 1、從URL中獲取查詢參數下 如果URL地址中使用?形式傳遞參數,可以直接使用res.query 來獲取到查詢的參數 2、從URL地址中獲取路徑參數 如果URL地址中,使用路徑傳遞參數,路徑類似於/i

css實現垂直居中的方法

定位 方法 cell 方式 middle ali ddl 顯示 內容 方法1、這個方法把一些 div 的顯示方式設置為表格,因此我們可以使用表格的 vertical-align 屬性。 #wrapper { //代表父元素 display: table; }

3.1.2 選擇結構的形式

關鍵字 解包 div nbsp 含義 下一步 知識 emp 必須   選擇結構通過判斷某些特定條件是否滿足來決定下一步的執行流程,是非常重要的控制結構。常見的有單分支選擇結構、雙分支選擇結構、多分支選擇結構以及嵌套的分支結構,形式比較靈活多變,具體使用哪一種最終還是取決於要

C#中實現並發的方法的性能測試

返回 也不會 thead syn image 9.png 結果 次數 存在 原文地址:https://www.cnblogs.com/durow/p/4837746.html 0x00 起因 去年寫的一個程序因為需要在局域網發送消息支持一些命令和簡單數據的傳輸,所以寫了

python 類C數組的兩形式list -->內容可變, tuple --->內容不可變

size print app http append 列表 itl c數組 multi python 中的列表相當與 C 中的數組,列表:list 初始化使用[ ], 元組:tuple 初始化使用();一、列表list 1 #!/usr/bin/python 2 3

純CSS實現垂直居中的方法

right lin 兼容 bar 實現 syntax info pro ems 垂直居中是布局中十分常見的效果之一,為實現良好的兼容性,PC端實現垂直居中的方法一般是通過絕對定位,table-cell,負邊距等方法。有了css3,針對移動端的垂直居中就更加多樣化。 方法1:

c語言結構體定義的形式

sdn 方法 tps statistic htm def courier ng- target 轉自https://blog.csdn.net/ziguo2010/article/details/79897327 1、最常用定義方式:定義結構體data,