Java深入講解AWT實(shí)現(xiàn)事件處理流程
AWT的事件處理
事件處理主要是為了響應(yīng)用戶的操作
- 事件對象(Event):封裝了GUI組件上發(fā)生的特定事件(通常就是用戶的一次操作)。
- 事件源(組件):事件發(fā)生的場所,通常就是產(chǎn)生事件的組件
- 監(jiān)聽器(Listener):負(fù)責(zé)監(jiān)聽事件源上發(fā)生的事件,并對各種事件做出相應(yīng)處理的對象(對象中包含事件處理器)。
- 事件處理器:監(jiān)聽器對象對接收的事件對象進(jìn)行相應(yīng)處理的辦法。
AWT中的事件繼承圖
在程序中創(chuàng)建了一個(gè)實(shí)現(xiàn)WindowListener接口的事件監(jiān)聽器類MyWindowListener,當(dāng)通過addWindowListener()方法將窗口與監(jiān)聽器對象綁定后,單擊關(guān)閉按鈕,會觸發(fā)監(jiān)聽器對象的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); //給窗口注冊一個(gè)監(jiān)聽器 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)的問題,jdk提供了一些適配器類,它們是監(jiān)聽器接口的默認(rèn)實(shí)現(xiàn)類,這些實(shí)現(xiàn)類中實(shí)現(xiàn)了接口中所有的方法,但是方法中沒有代碼,程序可以通過繼承適配器類來達(dá)到實(shí)現(xiàn)監(jiān)聽器接口的目的。
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); //給窗口注冊一個(gè)監(jiān)聽器 MyWindowListener mw=new MyWindowListener(); f.addWindowListener(mw); } } //繼承WindowAdapter類,重寫windowClosing()方法 class MyWindowListener1 extends WindowAdapter { ? @Override public void windowClosing(WindowEvent e) { Window window=(Window) e.getComponent(); window.dispose(); } }
由于MyWindowListener類繼承了適配器類WindowAdapter,由于實(shí)現(xiàn)的功能是關(guān)閉窗口,所以只需要重寫windowClosing()方法,幾乎所有的監(jiān)聽器接口都有對應(yīng)的適配器類,通過繼承適配器類來實(shí)現(xiàn)監(jiān)聽器接口時(shí),需要處理那些事件,就直接重寫該事件對應(yīng)的方法。
用匿名內(nèi)部類實(shí)現(xiàn)事件處理
上面的事件適配器中通過繼承適配器類對事件源對象實(shí)現(xiàn)了監(jiān)聽,但是為了代碼的簡潔,可以使用匿名內(nèi)部類來創(chuàng)建事件的監(jiān)聽器對象,對所發(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)部類的方法給按鈕注冊了一個(gè)鼠標(biāo)事件監(jiān)聽器,因?yàn)橹恍枰O(jiān)聽按鈕的點(diǎn)擊事件,使用了MouseAdapter適配器類,重寫了mouseClicked()方法,當(dāng)按鈕被點(diǎn)擊時(shí),會把單擊事件作為對象傳遞給事件監(jiān)聽器,做出退出程序的處理。
小結(jié)
以上就是對于AWT事件處理的簡單概述,可以讓們明白在對鼠標(biāo)鍵盤進(jìn)行操作的過程中AWT事件是怎樣處理的。
到此這篇關(guān)于Java深入講解AWT實(shí)現(xiàn)事件處理流程的文章就介紹到這了,更多相關(guān)Java AWT事件處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java操作elasticsearch詳細(xì)方法總結(jié)
elasticsearch是使用Java編寫的一種開源搜索引擎,也是一種分布式的搜索引擎架構(gòu),這篇文章主要給大家介紹了關(guān)于java操作elasticsearch的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12java 如何給對象中的包裝類設(shè)置默認(rèn)值
這篇文章主要介紹了java 如何給對象中的包裝類設(shè)置默認(rèn)值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03java實(shí)現(xiàn)國產(chǎn)sm4加密算法
這篇文章主要介紹了java實(shí)現(xiàn)國產(chǎn)sm4加密算法的步驟,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12@Value如何獲取yml和properties配置參數(shù)
這篇文章主要介紹了@Value如何獲取yml和properties配置參數(shù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07關(guān)于RedisTemplate之opsForValue的使用說明
這篇文章主要介紹了關(guān)于RedisTemplate之opsForValue的使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06java開發(fā)gui教程之jframe監(jiān)聽窗體大小變化事件和jframe創(chuàng)建窗體
這篇文章主要介紹了java開發(fā)gui教程中jframe監(jiān)聽窗體大小變化事件和jframe創(chuàng)建窗體的示例,需要的朋友可以參考下2014-03-03