亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

全面介紹Java事件處理與發送

2019-11-18 11:48:58
字體:
來源:轉載
供稿:網友

  任何時候,按下鍵盤或鼠標的鍵就產生了事件。組件接受和處理事件的方式自JDK1.1以來都保持不變。Swing組件能夠產生許多不同類別的事件,包括那些在java.awt.event包以及在javax.swing.event包中的事件。Swing新引入的那些事件類別往往是與特定Swing組件相關的。每一個事件類別都是一個對象,它至少指明了事件的發生源,往往還帶有其它消息,如該事件的類別、在事件發生前和發生后事件源狀態的變化,等等。事件源大部分是普通的組件或模型(models, 即MVC中的M,在以后的blog中可能會介紹Swing組件的MVC結構)。其它的對象也可能產生事件。
  
  要想收到事件產生的通知,我們需要在目標對象上注冊事件監聽器。事件監聽器是任意XXListener類或接口的具體實現(XX代指事件的類型)。XXListener是定義在java.awt.event、java.beans和javax.swing.event包中的類或接口。在每個接口中至少定義了一個方法(method),該方法以對應的XXEvent作為參數。支持發送XXEvent事件發生通知的類都須實現XXListener接口,同時提供相應的addXXListener()和removeXXListener()方法來注冊和移除這些事件監聽器,大部分的事件目標對象(target)都答應注冊任意多個事件監聽器。通常支持XXEvent的類都提供受保護的方法(PRotected method)fireXX()來構造事件對象及將它送至事件處理器(event handler)進行處理。
  
  javax.swing.event.EventListenerList類
  
  EventListenerList是一個包含XXEvent/XXListener對(pairs)的陣列(數組)。JComponent及其派生類使用一個EventListenerList對象來維護其事件監聽器。所有默認的模型(models)同樣維護事件監聽器和一個EventListenerList。當一個監聽器被注冊到一個Swing組件或模型(model)時,對應的事件的Class實例(用來標識事件類別)被添加至EventListenerList陣列,后面緊隨該監聽器本身(即一個XXEvent/XXListener對)。因為這些對是儲存在陣列而不是在可變的集合(mutable collection)中(出于對效率的考慮),每一次添加和移除都會調用System.arrayCopy()來生成一個新的陣列。當收到事件時,陣列被遍歷,事件就會被送至擁有其類型的每一個事件監聽器。由于陣列是按XXEvent, XXListener, YYEvent, YYListener, ... 的方式排列的,某個事件類別的監聽器總是緊隨其后。這種方式使得事件處理十分高效。為了線程安全,當從EventListenerList添加和移除監聽器時,方法訪問陣列必須同步。
  
  JComponent定義了一個名為listenerList的受保護EventListListener屬性,因而所有它的子類都繼續了這個屬性。Swing組件直接透過listenerList屬性來治理其大部分事件監聽器。
  
  事件發送線程
  
  事件監聽器在事件發送線程(一個java.awt.EventDispatchThread類的實例)中接受并處理事件。所有的繪制和組件布局也被要求在此線程中發生。事件發送線程在AWT和Swing中具有頭等的重要性,在應用中控制組件狀態和顯示的隨時更新方面扮演著要害的角色。
  
  與此線程相關的是一個事件的FIFO(First In First Out,先進先出)隊列:系統事件隊列(java.awt.EventQueue的一個實例)。跟所有的FIFO隊列一樣,系統事件隊列也是被線性填充的。無論是更新組件屬性,布局,或是重新繪制,每一個請求依次運行事件處理代碼。所有事件被依次處理是為了避免像某個組件的狀態在它重新繪制的中途被意外改變這樣的情況。知道這一點后,我們就要避免在事件發送線程之外去發送事件。比如說,在另一個線程中直接調用fireXX()方法就是不安全的。我們同時也必須保證事件處理代碼和繪制代碼盡快地執行完,否則整個系統隊列就會被阻塞,被迫等待某個事件被處理,重新繪制,或是布局完畢,而我們的應用程序則像是被“凍結”或是失去響應。
  ==============================================================================================
  // Thanks to Matthew Robinson and Pavel Vorobiev, Ph.D for their great book Swing, this article is translated form
  // this book, 1st edition. You can find these text in their book (in English) of Chapter 2.
  =================================================================================
  
  要想收到事件產生的通知,我們需要在目標對象上注冊事件監聽器。事件監聽器是任意XXListener類或接口的具體實現(XX代指事件的類型)。XXListener是定義在java.awt.event、java.beans和javax.swing.event包中的類或接口。在每個接口中至少定義了一個方法(method),該方法以對應的XXEvent作為參數。支持發送XXEvent事件發生通知的類都須實現XXListener接口,同時提供相應的addXXListener()和removeXXListener()方法來注冊和移除這些事件監聽器,大部分的事件目標對象(target)都答應注冊任意多個事件監聽器。通常支持XXEvent的類都提供受保護的方法(protected method)fireXX()來構造事件對象及將它送至事件處理器(event handler)進行處理。
  
  javax.swing.event.EventListenerList類
  
  EventListenerList是一個包含XXEvent/XXListener對(pairs)的陣列(數組)。JComponent及其派生類使用一個EventListenerList對象來維護其事件監聽器。所有默認的模型(models)同樣維護事件監聽器和一個EventListenerList。當一個監聽器被注冊到一個Swing組件或模型(model)時,對應的事件的Class實例(用來標識事件類別)被添加至EventListenerList陣列,后面緊隨該監聽器本身(即一個XXEvent/XXListener對)。因為這些對是儲存在陣列而不是在可變的集合(mutable collection)中(出于對效率的考慮),每一次添加和移除都會調用System.arrayCopy()來生成一個新的陣列。當收到事件時,陣列被遍歷,事件就會被送至擁有其類型的每一個事件監聽器。由于陣列是按XXEvent, XXListener, YYEvent, YYListener, ... 的方式排列的,某個事件類別的監聽器總是緊隨其后。這種方式使得事件處理十分高效。為了線程安全,當從EventListenerList添加和移除監聽器時,方法訪問陣列必須同步。
  
  JComponent定義了一個名為listenerList的受保護EventListListener屬性,因而所有它的子類都繼續了這個屬性。Swing組件直接透過listenerList屬性來治理其大部分事件監聽器。
  
  事件發送線程
  
  事件監聽器在事件發送線程(一個java.awt.EventDispatchThread類的實例)中接受并處理事件。所有的繪制和組件布局也被要求在此線程中發生。事件發送線程在AWT和Swing中具有頭等的重要性,在應用中控制組件狀態和顯示的隨時更新方面扮演著要害的角色。
  
  與此線程相關的是一個事件的FIFO(First In First Out,先進先出)隊列:系統事件隊列(java.awt.EventQueue的一個實例)。跟所有的FIFO隊列一樣,系統事件隊列也是被線性填充的。無論是更新組件屬性,布局,或是重新繪制,每一個請求依次運行事件處理代碼。所有事件被依次處理是為了避免像某個組件的狀態在它重新繪制的中途被意外改變這樣的情況。知道這一點后,我們就要避免在事件發送線程之外去發送事件。比如說,在另一個線程中直接調用fireXX()方法就是不安全的。我們同時也必須保證事件處理代碼和繪制代碼盡快地執行完,否則整個系統隊列就會被阻塞,被迫等待某個事件被處理,重新繪制,或是布局完畢,而我們的應用程序則像是被“凍結”或是失去響應。
  ==============================================================================================
  // Thanks to Matthew Robinson and Pavel Vorobiev, Ph.D for their great book Swing, this article is translated form
  // this book, 1st edition. You can find these text in their book (in English) of Chapter 2.
  =================================================================================
  
  要想收到事件產生的通知,我們需要在目標對象上注冊事件監聽器。事件監聽器是任意XXListener類或接口的具體實現(XX代指事件的類型)。XXListener是定義在java.awt.event、java.beans和javax.swing.event包中的類或接口。在每個接口中至少定義了一個方法(method),該方法以對應的XXEvent作為參數。支持發送XXEvent事件發生通知的類都須實現XXListener接口,同時提供相應的addXXListener()和removeXXListener()方法來注冊和移除這些事件監聽器,大部分的事件目標對象(target)都答應注冊任意多個事件監聽器。通常支持XXEvent的類都提供受保護的方法(protected method)fireXX()來構造事件對象及將它送至事件處理器(event handler)進行處理。
  
  javax.swing.event.EventListenerList類
  
  EventListenerList是一個包含XXEvent/XXListener對(pairs)的陣列(數組)。JComponent及其派生類使用一個EventListenerList對象來維護其事件監聽器。所有默認的模型(models)同樣維護事件監聽器和一個EventListenerList。當一個監聽器被注冊到一個Swing組件或模型(model)時,對應的事件的Class實例(用來標識事件類別)被添加至EventListenerList陣列,后面緊隨該監聽器本身(即一個XXEvent/XXListener對)。因為這些對是儲存在陣列而不是在可變的集合(mutable collection)中(出于對效率的考慮),每一次添加和移除都會調用System.arrayCopy()來生成一個新的陣列。當收到事件時,陣列被遍歷,事件就會被送至擁有其類型的每一個事件監聽器。由于陣列是按XXEvent, XXListener, YYEvent, YYListener, ... 的方式排列的,某個事件類別的監聽器總是緊隨其后。這種方式使得事件處理十分高效。為了線程安全,當從EventListenerList添加和移除監聽器

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩亚洲欧美| 日韩免费在线免费观看| 国产精品久久久久91| 一区三区二区视频| 色婷婷综合成人| 日韩av影片在线观看| 欧美国产中文字幕| 日韩精品高清视频| 欧美肥老妇视频| 欧美电影免费观看| 日韩av一区在线| 亚洲福利视频网| 另类图片亚洲另类| 亚洲aⅴ男人的天堂在线观看| 91在线免费网站| 91精品在线国产| 欧美日韩亚洲91| 欧美黄色片视频| 日韩国产欧美精品一区二区三区| 国产精自产拍久久久久久| 欧美亚州一区二区三区| 欧日韩不卡在线视频| 亚洲精品美女在线观看| 91久久久久久久| 91精品久久久久久久久久久久久| 97在线精品视频| 欧美电影免费观看大全| 欧美午夜www高清视频| 久久久久国产一区二区三区| 日韩精品免费视频| 久久精品国产清自在天天线| 欧美日韩国产精品专区| 亚洲国产成人精品女人久久久| 色婷婷综合成人av| 日韩大片在线观看视频| 欧美电影免费观看高清| 成人h片在线播放免费网站| 国产精品久久久久91| 日韩av在线不卡| 一本一本久久a久久精品综合小说| 国产成人中文字幕| 久久久久久一区二区三区| 国产精品久久久久久av| 国产精品久久久久7777婷婷| 国产福利精品av综合导导航| 久久九九热免费视频| 国产精品a久久久久久| 欧美裸体xxxx极品少妇| 国产日韩av在线播放| 日韩精品一区二区三区第95| 狠狠躁夜夜躁人人爽超碰91| 久久国产精品视频| 日本午夜在线亚洲.国产| 成人在线国产精品| 91成人性视频| 亚洲美女www午夜| 欧美最猛性xxxxx亚洲精品| 欧美自拍大量在线观看| 欧美激情精品久久久久久变态| 欧美成人在线影院| 福利精品视频在线| 欧美日韩成人在线观看| 亚洲激情视频在线播放| 宅男66日本亚洲欧美视频| 国产精品一区专区欧美日韩| 国产91精品黑色丝袜高跟鞋| 97国产精品人人爽人人做| 亚洲第一视频网站| 国产一区二区三区丝袜| 亚洲18私人小影院| 欧美日韩在线影院| 久久久精品在线观看| 国产精品一区av| 日韩精品免费视频| 亚洲尤物视频网| 欧美激情xxxx性bbbb| 亚洲天堂日韩电影| 精品一区二区电影| 92版电视剧仙鹤神针在线观看| 91sa在线看| 国产精品福利小视频| 国产精品久久久久久久久久东京| 色爱av美腿丝袜综合粉嫩av| 久久久国产一区二区| 欧美黄色片在线观看| 日韩精品一区二区三区第95| 欧美日韩中文字幕综合视频| 色综合久久中文字幕综合网小说| 少妇高潮久久久久久潘金莲| 成人精品在线视频| 国产一区二区色| 国产精品伦子伦免费视频| 日韩在线观看免费高清| 久久成人av网站| 91成人国产在线观看| 国产一区二区激情| 久久夜色精品亚洲噜噜国产mv| 久久久久久中文| 日韩中文视频免费在线观看| 色综合老司机第九色激情| 久久国产视频网站| 97久久超碰福利国产精品…| 91影视免费在线观看| 亚洲国产成人精品久久| 欧美成人精品影院| 亚洲一区二区三区乱码aⅴ| 国产亚洲激情视频在线| 夜色77av精品影院| 九九综合九九综合| 国产一区二区三区在线看| 亚洲激情中文字幕| 国产精品444| 色偷偷噜噜噜亚洲男人的天堂| 国产精品99导航| 国产精品三级美女白浆呻吟| 亚洲欧美自拍一区| 久久久久国产视频| 欧美日韩人人澡狠狠躁视频| 久久久久久久久国产精品| 国产性色av一区二区| 91精品国产网站| 欧美乱人伦中文字幕在线| 91亚洲一区精品| 亚洲人午夜色婷婷| 亚洲天堂免费在线| 最近免费中文字幕视频2019| 91精品国产电影| 欧美成人免费全部观看天天性色| 成人黄色在线观看| 国产精品视频xxx| 成人xvideos免费视频| 欧美精品在线免费| 欧美日韩一二三四五区| 精品国产欧美一区二区五十路| 色婷婷综合久久久久中文字幕1| 精品在线小视频| 最新国产成人av网站网址麻豆| 欧美野外wwwxxx| 最近2019中文字幕在线高清| 一区二区成人av| 中文字幕不卡在线视频极品| 国产成+人+综合+亚洲欧洲| 国产精品国模在线| 欧美日韩在线观看视频| 91精品国产乱码久久久久久蜜臀| 欧洲亚洲在线视频| 久久久久国产精品一区| 日韩精品极品毛片系列视频| 日韩男女性生活视频| 久久久久久久国产精品| 精品夜色国产国偷在线| 国外成人在线视频| 91麻豆国产语对白在线观看| 久久久视频在线| 色妞久久福利网| 亚洲综合中文字幕68页| 国产精品大片wwwwww| 久久99国产精品自在自在app| 亚洲丝袜av一区| 2019国产精品自在线拍国产不卡| 成人精品一区二区三区电影免费| 欧美精品第一页在线播放| 日韩av快播网址| 亚洲激情小视频|