事件處理主要是為了回應使用者的操作
事件物件(Event ):封裝了GUI元件上發生的特定事件(通常就是使用者的一次操作)。
事件來源(元件):事件發生的場所,通常就是產生事件的元件
監聽器(Listener):負責監聽事件來源上發生的事件,並對各種事件做出對應處理的物件(物件中包含事件處理器)。
事件處理器:監聽器物件對接收的事件物件進行對應處理的方法。
# 在程式中建立了實作WindowListener介面的事件監聽器類別MyWindowListener,當透過addWindowListener()方法將視窗與監聽器物件綁定後,按一下關閉按鈕,會觸發監聽器物件的windowClosing()方法,將目前視窗隱藏並釋放,從而關閉了視窗。
程式碼如下
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); //给窗口注册一个监听器 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) { } }
結果
為了解決產生的方法空實作的問題,jdk提供了一些適配器類,它們是監聽器介面的預設實作類,這些實作類別中實作了介面中所有的方法,但是方法中沒有程式碼,程式可以透過繼承適配器類別來達到實現監聽器介面的目的。
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); //给窗口注册一个监听器 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,由於實作的功能是關閉窗口,所以只需要重寫windowClosing()方法,幾乎所有的監聽器介面都有對應的適配器類,透過繼承適配器類別來實作監聽器介面時,需要處理那些事件,就直接重寫該事件對應的方法。
用匿名內部類別實作事件處理
上面的事件適配器中透過繼承適配器類別對事件來源物件實現了監聽,但是為了程式碼的簡潔,可以使用匿名內部類別來建立事件的監聽器對象,對所發生的事件進行處理。
為視窗新增一個具有點擊事件的按鈕
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); } }); } }
首先呼叫了btn的addMouseListner()方法,在這個方法中以匿名內部類別的方法給按鈕註冊了一個滑鼠事件監聽器,因為只需要監聽按鈕的點擊事件,使用了MouseAdapter適配器類,重寫了mouseClicked()方法,當按鈕被點擊時,會把單擊事件作為對象傳遞給事件監聽器,做出退出程序的處理。
以上是Java AWT實作事件處理流程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!