① 淺析java語言的事件處理快捷回復
在JAVA程序設計中 事件的處理是非常重要的 尤其是在需要自定義事件和設計JavaBean時 對事件的處理過程有一個完整的認識對於編程是很有幫助的
下面用一個演示性的例子來說明事件及其處理過程
一 事件的組成
如果想要自定義一個事件 則必須提供一個事件的監聽介面以及一個事件類 在JAVA中監聽介面繼承java util EventListener 事件類繼承java util EventObject 很多基本的事件在編程環境中都已經提供可以很方便使用 但是在自定義事件中必須要要了解這些
下面是一個事件類的代碼 事件類可以向用戶處理程序提供被監聽類的信息
import java util *;
public class PropertyEvent extends EventObject {
public PropertyEvent(){}
}
下面是監聽介面的代碼
import java util *;
public interface PropertyListener extends EventListener {
public void propertyChanged(PropertyEvent propertyEvent);
}
二 事件的處理機制
下面是一段簡要的被監聽類代碼 通過代碼分析事件處理過程
import java util *;
public class Exam {
private int property;
//listeners用來存放已注冊的監聽對象
private Set listeners= new HashSet();
public void addListener(PropertyListener propertyListener){
//listeners必須保證只能被一個線程訪問
synchronized(listeners){
listeners add(propertyListener);
}
}
public void firePropertyChange(){
Iterator iterator;
synchronized(listeners){
//將listeners中的類名放到iterator
iterator = new HashSet(erator();
}
//創建事件類
PropertyEvent propertyEvent = new PropertyEvent();
while(iterator hasNext()){
PropertyListener propertyListener = (propertyListener) iterator next();
//調用用戶的事件處理程序
propertyListener propertyChanged(propertyEvent);
}
}
}
當屬性值發生變化時 首先進行內部處理調用firePropertyChange方法 產生一個事件對象然後用事件對象為參數來調用用戶的事件處理程序
三 事件處理的使用
基本用法
public Exam exam;
exam addListener(this);
public void propertyChange(PropertyEvent event){ }
注 exam是被監聽對象 this為監聽對象 是已經實現了介面方法的當前類 addListener
將當前類注冊到listeners
一個被監聽對象可以有多個監聽對象
exam addListener(listener );
exam addListener(listener );
這樣當exam的property發生變化時 actionListener 和actionListener 的處理程序都會
被調用 當然listener 和listener 必須都是已實現介面方法的類
被監聽的對象也可以是實現了方法的介面
exam addListener(
new PropertyListener(){
//用戶定義事件處理過程
public void propertyChange(PropertyEvent event){
}
);
lishixin/Article/program/Java/hx/201311/26740
② java的事件處理是什麼
打個比方:如果用戶用滑鼠單擊了按鈕對象button,則該按鈕button就是事件源,而java運行時系統會生成ActionEvent類的對象actionE,該對象中描述了該單擊事件發生時的一些信息,然後,事件處理者對象將接收由java運行時系統傳遞過來的事件對象actionE並進行相應的處理。
由於同一個事件源上可能發生多種事件,因此java採取了授權處理機制,事件源可以把在其自身所有可能發生的事件分別授權給不同的事件處理者來處理。比如在Canvas對象上既可能發生滑鼠事件,也可能發生鍵盤事件,該Canvas對象就可以授權給事件處理者一來處理滑鼠事件,同時授權給事件處理者二來處理鍵盤事件。有時也將事件處理者稱為監聽器,主要原因也在於監聽器時刻監聽著事件源上所有發生的事件類型,一旦該事件類型與自己所負責處理的事件類型一致,就馬上進行處理。授權模型把事件的處理委託給外部的處理實體進行處理,實現了將事件源和監聽器分開的機制。事件處理者(監聽器)通常是一個類,該類如果要能夠處理某種類型的事件,就必須實現與該事件類型相對的介面。例如例5.9中類ButtonHandler之所以能夠處理ActionEvent事件,原因在於它實現了與ActionEvent事件對應的介面ActionListener。每個事件類都有一個與之相對應的介面。將事件源對象和事件處理器(事件監聽器)分開。
使用授權處理模型進行事件處理的一般方法歸納如下:
1.對於某種類型的事件XXXEvent, 要想接收並處理這類事件,必須定義相應的事件監聽器類,該類需要實現與該事件相對應的介面XXXListener;
2.事件源實例化以後,必須進行授權,注冊該類事件的監聽器,使用addXXXListener(XXXListener ) 方法來注冊監聽器。
這是我的一點個人見解,希望對你有幫助,加油。
③ 簡述java語言的事件處理機制,事件處理的3要素是什麼.
(1)事件源 事件源是一個事件的產生者,如按鈕、窗口及文本域等。
(2)事件類型 Java中所有的事件都封裝成一個類,這些事件類被集中在java.awt.event包,所有的事件類均繼承了AWTEvent類和一個方法——getSouce()方法,該方法返回發生事件的對象。
(3)事件監聽器 不同的類型事件發生後,由事件監聽器接收事件並調用相應的事件處理方法。所有的事件監聽器實際上都是一個java.awt.event包中的介面,引入了java.util.EventListener介面。不同事件類型的監聽器具有不同的方法。
④ 淺析Java與C#的事件處理機制(一)
Java與C#的事件處理都是實現了事件源 事件響應者機制 但又不完全相同 Java實現的是一種事件源與事件響應者兩級實體對象方式 這里的事件響應者也是事件監聽者 而C#實現的是一種事件源 代理 事件響應者三級實體對象方式 下面就這兩種方式來具體說明
Java事件處理
從概念上講 事件是一種在 源對象 和 監聽者對象 之間 某種狀態發生變化的傳遞機制 事件有許多不同的用途 例如在Windows系統中常要處理的滑鼠事件 窗口邊界改變事件 鍵盤事件等 在Java中則是定義了一個普通的 可擴充的事件機制 這種機制能夠
對事件類型和傳遞的模型的定義和擴充提供一個公共框架 並適合於廣泛的應用
與Java語言和環境有較高的集成度
事件能被描述環境捕獲和觸發
能使其它構造工具採取某種技術在設計時直接控制事件 以及事件源和事件監聽者之間的聯系
事件機制本身不依賴於復雜的開發工具
事件從事件源到監聽者的傳遞是通過對目標監聽者對象的Java方法調用進行的 對每個明確的事件的發生 都相應地定義一個明確的Java方法 這些方法都集中定義在事件監聽者(EventListener)介面中 這個介面要繼承java util EventListener 實現了事件監聽者介面中一些或全部方法的類就是事件監聽者 伴隨著事件的發生 相應的狀態通常都封裝在事件狀態對象中 該對象必須繼承自java util EventObject 事件狀態對象作為單參傳遞給應響應該事件的監聽者方法中 發出某種特定事件的事件源的標識是 遵從規定的設計格式為事件監聽者定義注冊方法 並接受對指定事件監聽者介面實例的引用 有時 事件監聽者不能直接實現事件監聽者介面 或者還有其它的額外動作時 就要在一個源與其它一個或多個監聽者之間插入一個事件適配器類的實例 來建立它們之間的聯系
事件狀態對象(Event State Object)
與事件發生有關的狀態信息一般都封裝在一個事件狀態對象中 這種對象是java util EventObject的子類 按設計習慣 這種事件狀態對象類的名應以Event結尾 例如
public class MouseMovedExampleEvent extends java util EventObject{ protected int x y /*創建一個滑鼠移動事件MouseMovedExampleEvent */MouseMovedExampleEvent(java awt Component source Point location) {super(source);x = location x;嫌銀攜y = location y;}/* 獲取滑鼠位置*/public Point getLocation() {return new Point(x y);}}
事件監聽者介面(芹伏EventListener Interface)與事件監聽者
由於Java事件模型是基於方法調用 因而需要一個定義並組織事件操縱方法的方式 事件操縱方法都被定義在繼承了java util EventListener類的EventListener介面中 按規定 EventListener介面的命名要以Listener結尾 任何一個類如果想操縱在EventListener介面中定義的方法都必須以實現這個介面方式進行 這個類也就是事件監聽者 例如
搏歲/*先定義了一個滑鼠移動事件對象*/public class MouseMovedExampleEvent extends java util EventObject {// 在此類中包含了與滑鼠移動事件有關的狀態信息 }/*定義了滑鼠移動事件的監聽者介面*/interface MouseMovedExampleListener extends java util EventListener {/*在這個介面中定義了滑鼠移動事件監聽者所應支持的方法*/void mouseMoved(MouseMovedExampleEvent mme);}
在介面中只定義方法名 方法的參數和返回值類型 如 上面介面中的mouseMoved方法的具體實現是在下面的ArbitraryObject類中定義的
class ArbitraryObject implements MouseMovedExampleListener {public void mouseMoved(MouseMovedExampleEvent mme){ }}
ArbitraryObject就是MouseMovedExampleEvent事件的監聽者
事件監聽者的注冊與注銷
為了各種可能的事件監聽者把自己注冊入合適的事件源中 建立源與事件監聽者間的事件流 事件源必須為事件監聽者提供注冊和注銷的方法 在前面的bound屬性介紹中已看到了這種使用過程 在實際中 事件監聽者的注冊和注銷要使用標準的設計格式
public void add< ListenerType>(< ListenerType> listener) public void remove< ListenerType>(< ListenerType> listener)
首先定義了一個事件監聽者介面
public interface ModelChangedListener extends java util EventListener {void modelChanged(EventObject e);}
接著定義事件源類
lishixin/Article/program/net/201311/14840
⑤ java中什麼是事件源,事件的處理過程是什麼
就是你通過什麼觸發了一個事件,比如單擊按鈕,那麼這個按鈕就是事件源,滑鼠的移動(覆蓋,離開,),鍵盤的輸入,根據不同的情況可做不同的監聽事件,使用不同的類來處理!
⑥ 簡述Java事件委託模型的事件處理機制
java 事件委託機制的概念,一個源產生一個事件並將它送到一個或多個監聽器那裡。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,然後返