Swing
Swing教學首頁
Swing介紹
Swing開發環境安裝
Swing控件
Swing Component類
Swing Container類
Swing JComponent類
Swing JLabel
Swing JButton
Swing JColorChooser
Swing JCheckBox
Swing JRadioButton
Swing JList
Swing JComboBox
Swing JTextField
Swing JTextArea
Swing ImageIcon
Swing JScrollBar
Swing JOptionPane
Swing JFileChooser
Swing JProgressBar
Swing JSlider
Swing JSpinner
Swing事件處理
SWING Event事件類
SWING AWTEvent事件類
SWING ActionEvent事件類
SWING InputEvent事件類
SWING KeyEvent事件類
SWING MouseEvent事件類
SWING WindowEvent事件類
SWING AdjustmentEvent事件處理
SWING ComponentEvent處理類
SWING ContainerEvent事件處理類
SWING MouseMotionEvent事件處理
SWING PaintEvent事件類
Swing事件監聽器
SWING ActionListener接口
SWING ComponentListener接口
Swing ItemListener接口
Swing KeyListener接口
Swing MouseListener Interface
Swing WindowListener接口
Swing AdjustmentListener接口
Swing ContainerListener接口
Swing MouseMotionListener接口
Swing FocusListener接口
Swing事件適配器
Swing FocusAdapter類
Swing KeyAdapter類
Swing MouseAdapter類
Swing WindowAdapter類
Swing MouseMotionAdapter類
Swing Layout佈局
Swing LayoutManager接口
Swing LayoutManager2接口
Swing BorderLayout佈局
Swing CardLayout佈局
Swing FlowLayout佈局類
Swing GridLayout佈局類
Swing GridBagLayout佈局類
Swing GroupLayout佈局類
Swing SpringLayout佈局類
Swing Menu菜單類
Swing JMenuBar類
Swing JMenuItem類
Swing JMenu類
Swing JCheckboxMenuItem類及例子
Swing JRadioButtonMenuItem類及例子
Swing JPopupMenu類及實例
Swing容器
Swing JPanel類及實例
Swing JFrame類和實例
Swing JWindow類及實例

Swing事件處理

什麼是事件?

一個對象的狀態變化被稱爲事件,即事件描述源狀態的變化。事件產生的結果與用戶交互的圖形用戶界面組件。例如,點擊一個按鈕,移動鼠標,通過鍵盤輸入一個字符,從列表中選擇一個項目,滾動頁面的活動,使一個事件的發生。

事件的類型

事件可以被大致分爲兩類:

  • 前臺事件 - 這些事件需要用戶直接互動。在圖形用戶界面中的圖形組件交互的人產生的後果。例如,點擊一個按鈕,移動鼠標,通過鍵盤輸入一個字符,從列表中選擇一個項目,滾動頁面等

  • 後臺事件 - 這些事件,需要最終用戶的交互是已知的作爲背景的事件。操作系統的中斷,硬件或軟件故障,定時器到期時,操作完成的背景事件的例子。

事件處理是什麼?

事件處理機制,控制的事件,並決定如果一個事件發生時,會發生什麼。這種機制被稱爲事件處理程序,在事件發生時執行的代碼。 Java使用代理事件模型來處理事件。該模型定義了標準的機制來生成和處理事件。讓我們簡要介紹這種模式。

代理事件模型具有以下的主要參與者,即:

  •  - 源是一個對象,在該對象上的事件發生。它的處理器提供發生事件的信息來源是可靠的。 JAVA提供與源對象的類。

  • 監聽器 - 它也被稱爲作爲事件handler.Listener是負責產生響應一個事件。從Java實現的角度來看,監聽器也是一個對象。等待直到它接收到一個事件監聽器。一旦收到事件,監聽器進程的事件就返回。

這種方法的好處是,用戶界面邏輯完全分開,生成該事件的邏輯。用戶界面元素是能夠委派的事件處理單獨的一段代碼。在這個模型中,需要與源對象註冊監聽使偵聽器能夠接收事件通知。這是一個有效的方式處理事件,因爲這些事件通知只發送給那些監聽器要接收他們。

參與事件處理的步驟

  • 用戶單擊該按鈕時產生該事件。

  • 現在有關事件類的對象是自動創建的信息源和事件在同一對象得到填充。

  • 事件對象被轉發註冊監聽器類的方法。

  • 該方法現在得到執行並返回。

要記住的要點有關監聽器

  • 爲了設計一個監聽類,我們必須開發一些監聽器接口。這些監聽器接口預測一些公共的抽象監聽器類必須實現的回調方法。

  • 如果不執行任何預定義的接口,類不能作爲源對象的監聽器類。

回調方法

這些方法所提供的API提供程序,被定義爲應用程序員和應用程序開發者調用。這裏的回調方法代表一個事件的方法。在響應一個事件的Java JRE將觸發回調方法。所有這些回調方法的監聽器接口。

如果一個組件需要一些監聽器會聽的事件源必須註冊自己監聽。

事件處理例子

選擇使用任何編輯器創建以下java程序在 D:/ > SWING > com > yiibai > gui >

SwingControlDemo.java

package com.yiibai.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingControlDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public SwingLayoutDemo(){ prepareGUI(); } public static void main(String[] args){ SwingLayoutDemo swingLayoutDemo = new SwingLayoutDemo(); swingLayoutDemo.showEventDemo(); } private void prepareGUI(){ mainFrame = new JFrame("Java SWING Examples"); mainFrame.setSize(400,400); mainFrame.setLayout(new GridLayout(3, 1)); headerLabel = new JLabel("",JLabel.CENTER ); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); controlPanel = new JPanel(); 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"); JButton okButton = new JButton("OK"); JButton submitButton = new JButton("Submit"); JButton cancelButton = new JButton("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:/ > SWING 然後輸出以下命令。

D:AWT>javac comyiibaiguiSwingControlDemo.java

如果沒有錯誤出現,這意味着編譯成功。使用下面的命令來運行程序。

D:AWT>java com.yiibai.gui.SwingControlDemo

驗證下面的輸出

SWING