Java深入講解AWT實(shí)現(xiàn)事件處理流程
AWT的事件處理
事件處理主要是為了響應(yīng)用戶的操作
- 事件對(duì)象(Event):封裝了GUI組件上發(fā)生的特定事件(通常就是用戶的一次操作)。
- 事件源(組件):事件發(fā)生的場(chǎng)所,通常就是產(chǎn)生事件的組件
- 監(jiān)聽(tīng)器(Listener):負(fù)責(zé)監(jiān)聽(tīng)事件源上發(fā)生的事件,并對(duì)各種事件做出相應(yīng)處理的對(duì)象(對(duì)象中包含事件處理器)。
- 事件處理器:監(jiān)聽(tīng)器對(duì)象對(duì)接收的事件對(duì)象進(jìn)行相應(yīng)處理的辦法。
AWT中的事件繼承圖

在程序中創(chuàng)建了一個(gè)實(shí)現(xiàn)WindowListener接口的事件監(jiān)聽(tīng)器類(lèi)MyWindowListener,當(dāng)通過(guò)addWindowListener()方法將窗口與監(jiān)聽(tīng)器對(duì)象綁定后,單擊關(guān)閉按鈕,會(huì)觸發(fā)監(jiān)聽(tīng)器對(duì)象的windowClosing()方法,將當(dāng)前窗口隱藏并釋放,從而關(guān)閉了窗口。
代碼如下
package AWT;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Example08 {
public static void main(String[] args) {
Frame f=new Frame("我的世界");
f.setSize(400,300);
f.setLocation(300,200);
f.setVisible(true);
//給窗口注冊(cè)一個(gè)監(jiān)聽(tīng)器
MyWindowListener mw=new MyWindowListener();
f.addWindowListener(mw);
}
}
class MyWindowListener implements WindowListener{
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
Window window= e.getWindow();
window.setVisible(false);
window.dispose();
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
?
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}結(jié)果

事件適配器
為了解決生成的方法空實(shí)現(xiàn)的問(wèn)題,jdk提供了一些適配器類(lèi),它們是監(jiān)聽(tīng)器接口的默認(rèn)實(shí)現(xiàn)類(lèi),這些實(shí)現(xiàn)類(lèi)中實(shí)現(xiàn)了接口中所有的方法,但是方法中沒(méi)有代碼,程序可以通過(guò)繼承適配器類(lèi)來(lái)達(dá)到實(shí)現(xiàn)監(jiān)聽(tīng)器接口的目的。
package AWT;
import java.awt.*;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Example08 {
public static void main(String[] args) {
Frame f=new Frame("我的世界");
f.setSize(400,300);
f.setLocation(300,200);
f.setVisible(true);
//給窗口注冊(cè)一個(gè)監(jiān)聽(tīng)器
MyWindowListener mw=new MyWindowListener();
f.addWindowListener(mw);
}
}
//繼承WindowAdapter類(lèi),重寫(xiě)windowClosing()方法
class MyWindowListener1 extends WindowAdapter {
?
@Override
public void windowClosing(WindowEvent e) {
Window window=(Window) e.getComponent();
window.dispose();
}
}由于MyWindowListener類(lèi)繼承了適配器類(lèi)WindowAdapter,由于實(shí)現(xiàn)的功能是關(guān)閉窗口,所以只需要重寫(xiě)windowClosing()方法,幾乎所有的監(jiān)聽(tīng)器接口都有對(duì)應(yīng)的適配器類(lèi),通過(guò)繼承適配器類(lèi)來(lái)實(shí)現(xiàn)監(jiān)聽(tīng)器接口時(shí),需要處理那些事件,就直接重寫(xiě)該事件對(duì)應(yīng)的方法。
用匿名內(nèi)部類(lèi)實(shí)現(xiàn)事件處理
上面的事件適配器中通過(guò)繼承適配器類(lèi)對(duì)事件源對(duì)象實(shí)現(xiàn)了監(jiān)聽(tīng),但是為了代碼的簡(jiǎn)潔,可以使用匿名內(nèi)部類(lèi)來(lái)創(chuàng)建事件的監(jiān)聽(tīng)器對(duì)象,對(duì)所發(fā)生的事件進(jìn)行處理。
為窗口添加一個(gè)具有點(diǎn)擊事件的按鈕
package AWT;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class NiMing {
public static void main(String[] args) {
Frame f=new Frame("我的世界");
f.setSize(400,300);
f.setLocation(300,200);
f.setVisible(true);
Button btn=new Button("Exit");
f.add(btn);
btn.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
});
}
}首先調(diào)用了btn的addMouseListner()方法,在這個(gè)方法中以匿名內(nèi)部類(lèi)的方法給按鈕注冊(cè)了一個(gè)鼠標(biāo)事件監(jiān)聽(tīng)器,因?yàn)橹恍枰O(jiān)聽(tīng)按鈕的點(diǎn)擊事件,使用了MouseAdapter適配器類(lèi),重寫(xiě)了mouseClicked()方法,當(dāng)按鈕被點(diǎn)擊時(shí),會(huì)把單擊事件作為對(duì)象傳遞給事件監(jiān)聽(tīng)器,做出退出程序的處理。
小結(jié)
以上就是對(duì)于AWT事件處理的簡(jiǎn)單概述,可以讓們明白在對(duì)鼠標(biāo)鍵盤(pán)進(jìn)行操作的過(guò)程中AWT事件是怎樣處理的。
到此這篇關(guān)于Java深入講解AWT實(shí)現(xiàn)事件處理流程的文章就介紹到這了,更多相關(guān)Java AWT事件處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法示例
這篇文章主要介紹了java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法,結(jié)合具體實(shí)例形式分析了java基于數(shù)組的矩陣定義、遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
SpringBoot后臺(tái)實(shí)現(xiàn)文件上傳下載
這篇文章主要為大家詳細(xì)介紹了SpringBoot后臺(tái)實(shí)現(xiàn)文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
java實(shí)現(xiàn)的海盜算法優(yōu)化版
這篇文章主要介紹了java實(shí)現(xiàn)的海盜算法優(yōu)化版,結(jié)合實(shí)例形式分析了java海盜算法的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07
SpringCloud微服務(wù)架構(gòu)升級(jí)匯總
這篇文章主要介紹了SpringCloud微服務(wù)架構(gòu)升級(jí)匯總,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價(jià)值,需要的朋友可以參考下2019-06-06
java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法
這篇文章主要介紹了java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法,涉及java非遞歸算法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
Java 判斷線程池所有任務(wù)是否執(zhí)行完畢的操作
這篇文章主要介紹了Java 判斷線程池所有任務(wù)是否執(zhí)行完畢的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08

