Java Swing事件處理方法
Swing是目前Java中不可缺少的窗口工具組,是用戶建立圖形化用戶界面(GUI)程序的強大工具。Java Swing組件自動產(chǎn)生各種事件來響應(yīng)用戶行為。如當(dāng)用戶點擊按鈕或選擇菜單項目時,Swing組件會產(chǎn)生一個ActionEvent。Swing組件會產(chǎn)生許多事件,如ActionEvents,ChangeEvents,ItemEvents等,來響應(yīng)用戶的鼠標(biāo)點擊行為,列表框中值的改變,計時器的開始計時等行為。在Java Swing編程中,通過注冊監(jiān)聽器,我們可以監(jiān)聽事件源產(chǎn)生的事件,從而在事件處理程序中處理我們所需要處理的用戶行為。
Java Swing中處理各組件事件的一般步驟是:
1. 新建一個組件(如JButton)。
2. 將該組件添加到相應(yīng)的面板(如JPanel)。
3. 注冊監(jiān)聽器以監(jiān)聽事件源產(chǎn)生的事件(如通過ActionListener來響應(yīng)用戶點擊按鈕)。
4. 定義處理事件的方法(如在ActionListener中的actionPerformed中定義相應(yīng)方法)。
我們可以用多種方法實現(xiàn)。但人們通常用二種方法。第一種方法是只利用一個監(jiān)聽器以及多個if語句來決定是哪個組件產(chǎn)生的事件;第二種方法是使用多個內(nèi)部類來響應(yīng)不同組件產(chǎn)生的各種事件,其具體實現(xiàn)又分兩種方式,一種是匿名內(nèi)部類,一種是一般內(nèi)部類。
為了說明如何使用上述方法實現(xiàn)事件的處理方法,我們建立一個簡單的應(yīng)用程序。該程序界面有兩個按鈕,當(dāng)用戶點擊相應(yīng)的按鈕,就會彈出一個對話框顯示相應(yīng)的內(nèi)容。通過這個簡單程序,你可以實現(xiàn)自己更多、更復(fù)雜的用戶界面程序。
首先,我們利用單個監(jiān)聽器來實現(xiàn)該程序。我們定義一個名為Simple1的類來包括所有代碼。所有的用戶行為(如點擊按鈕)由一個監(jiān)聽器SimpleListenner中的actionPerformed方法來處理。以下是代碼:
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- public class Simple3
- {
- private static JFrame frame; // 定義為靜態(tài)變量以便main使用
- private static JPanel myPanel; // 該面板用來放置按鈕組件
- private JButton button1; // 這里定義按鈕組件
- private JButton button2; // 以便讓ActionListener使用
- // 利用一般內(nèi)部類來監(jiān)聽每一個事件源產(chǎn)生的事件如(button1, button2)
- private class Button1Handler implements ActionListener
- {
- public void actionPerformed(ActionEvent e)
- {
- JOptionPane.showMessageDialog(frame,
- "按鈕1 被點擊");
- }
- }
- private class Button2Handler implements ActionListener
- {
- public void actionPerformed(ActionEvent e)
- {
- JOptionPane.showMessageDialog(frame,
- "按鈕2 被點擊");
- }
- }
- public Simple3() // // 構(gòu)造器, 建立圖形界面
- {
- // 新建面板
- myPanel = new JPanel();
- // 新建按鈕
- button1 = new JButton("按鈕1"); // 新建按鈕1
- button2 = new JButton("按鈕2");
- // 對每一個組件注冊監(jiān)聽內(nèi)部類
- button1.addActionListener(new Button1Handler());
- button2.addActionListener(new Button2Handler());
- myPanel.add(button1); // 添加按鈕到面板
- myPanel.add(button2);
- }
- public static void main(String s[])
- {
- Simple3 gui = new Simple3(); // 新建Simple3組件
- frame = new JFrame("Simple3"); // 新建JFrame
- // 處理關(guān)閉事件的通常方法
- frame.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e)
- {System.exit(0);} });
- frame.getContentPane().add(myPanel);
- frame.pack();
- frame.setVisible(true);
- }
- }
以上分析了在Java Swing中事件的處理方式,其中利用一般內(nèi)部類來實現(xiàn)的方法,從代碼書寫、閱讀、維護(hù)以及程序的可擴展性角度來看,最為值得推薦供大家使用。
【編輯推薦】