AWT事件處理
事件是什麼?
一個對象的狀態變化被稱為事件,即事件描述源狀態的變化。事件產生的結果與用戶交互的圖形用戶界麵組件。例如,點擊一個按鈕,移動鼠標,通過鍵盤輸入一個字符,從列表中選擇一個項目,滾動頁麵的活動,使一個事件的發生。
事件的類型
事件可以被大致分為兩類:
-
前台事件 - 這些事件需要用戶直接互動。在圖形用戶界麵中的圖形組件交互的人產生的後果。例如,點擊一個按鈕,移動鼠標,通過鍵盤輸入一個字符,從列表中選擇一個項目,滾動頁麵等
-
後台事件 - 這些事件,需要最終用戶的交互是已知的作為後台的事件。操作係統的中斷,硬件或軟件故障,定時器到期時,操作完成的後台事件的例子。
事件處理是什麼?
事件處理機製,控製的事件,並決定如果一個事件發生時,會發生什麼。這種機製被稱為事件處理程序,在事件發生時執行的代碼。 Java使用代理事件模型來處理事件。該模型定義了標準的機製來生成和處理事件。讓我們簡要介紹這種模式。
代理事件模型具有以下的主要參與者,即:
-
源 - 源是一個對象,在該對象上的事件發生。它的處理器提供發生事件的信息來源是可靠的。 JAVA提供源對象的類。
-
監聽器 - 它也被稱為事件處理程序。監聽器是負責生成響應事件。從Java實現的角度來看,監聽器也是一個對象。等待,直到它接收到一個事件監聽器。一旦收到事件,監聽器進程的事件然後返回。
這種方法的好處是,用戶界麵邏輯完全分開,生成該事件的邏輯。用戶界麵元素是能夠代理的事件處理單獨的一段代碼。在這個模型中,需要與源對象注冊監聽使偵聽器能夠接收事件通知。這是一個有效的方式處理事件,因為這些事件通知隻發送給那些監聽器想要它們接收。
參與事件處理的步驟
-
用戶單擊該按鈕時產生該事件。
-
現在有關事件類的對象是自動創建的信息源和事件在同一對象得到填充。
-
事件對象被轉發注冊監聽器類的方法。
-
該方法現在得到執行和返回。
要記住的有關監聽器要點
-
為了設計一個監聽類,我們必須製定一些監聽器接口。這些監聽器接口預測一些公共的抽象監聽器類必須實現的回調方法。
-
如果不實現任何預定義的接口,你的類不能作為源對象的監聽器類。
回調方法
這些方法所提供的API提供者,被定義為應用程序員和應用程序開發者調用。這裡的回調方法代表一個事件的方法。在響應一個事件的Java JRE將觸發回調方法。所有這些回調方法的監聽器接口。
如果一個組件需要一些監聽器將監聽的事件源必須注冊自己的監聽器。
事件處理示例
選擇使用任何編輯器創建以下java程序 D:/ > AWT > com > yiibai > gui >
AwtControlDemopackage com.yiibai.gui; import java.awt.*; import java.awt.event.*; public class AwtControlDemo { private Frame mainFrame; private Label headerLabel; private Label statusLabel; private Panel controlPanel; public AwtControlDemo(){ prepareGUI(); } public static void main(String[] args){ AwtControlDemo awtControlDemo = new AwtControlDemo(); awtControlDemo.showEventDemo(); } private void prepareGUI(){ mainFrame = new Frame("Java AWT Examples"); mainFrame.setSize(400,400); mainFrame.setLayout(new GridLayout(3, 1)); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); headerLabel = new Label(); headerLabel.setAlignment(Label.CENTER); statusLabel = new Label(); statusLabel.setAlignment(Label.CENTER); statusLabel.setSize(350,100); controlPanel = new Panel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showEventDemo(){ headerLabel.setText("Control in action: Button"); Button okButton = new Button("OK"); Button submitButton = new Button("Submit"); Button cancelButton = new Button("Cancel"); okButton.setActionCommand("OK"); submitButton.setActionCommand("Submit"); cancelButton.setActionCommand("Cancel"); okButton.addActionListener(new ButtonClickListener()); submitButton.addActionListener(new ButtonClickListener()); cancelButton.addActionListener(new ButtonClickListener()); controlPanel.add(okButton); controlPanel.add(submitButton); controlPanel.add(cancelButton); mainFrame.setVisible(true); } private class ButtonClickListener implements ActionListener{ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if( command.equals( "OK" )) { statusLabel.setText("Ok Button clicked."); } else if( command.equals( "Submit" ) ) { statusLabel.setText("Submit Button clicked."); } else { statusLabel.setText("Cancel Button clicked."); } } } }
編譯程序,使用命令提示符。到 D:/ > AWT 然後鍵入以下命令。
D:AWT>javac comyiibaiguiAwtControlDemo.java
如果冇有錯誤出現,這意味著編譯成功。使用下麵的命令來運行程序。
D:AWT>java com.yiibai.gui.AwtControlDemo
驗證下麵的輸出