鍍金池/ 教程/ Java/ Swing事件處理
Swing JRadioButton
Swing Layout布局
Swing JTextField
Swing JLabel
Swing開(kāi)發(fā)環(huán)境安裝
Swing JComponent類
SWING ActionEvent事件類
Swing JScrollBar
Swing教程首頁(yè)
Swing JFileChooser
SWING ContainerEvent事件處理類
Swing AdjustmentListener接口
Swing WindowAdapter類
SWING ComponentListener接口
Swing JMenuBar類
Swing JPanel類及實(shí)例
Swing
SWING AdjustmentEvent事件處理
Swing JWindow類及實(shí)例
Swing介紹
Swing MouseMotionAdapter類
SWING WindowEvent事件類
Swing ItemListener接口
SWING MouseEvent事件類
Swing JMenu類
SWING KeyEvent事件類
Swing MouseMotionListener接口
Swing JProgressBar
SWING AWTEvent事件類
Swing JRadioButtonMenuItem類及例子
Swing KeyAdapter類
SWING ActionListener接口
Swing LayoutManager接口
SWING MouseMotionEvent事件處理
Swing Component類
Swing Container類
Swing CardLayout布局
Swing MouseAdapter類
Swing JSlider
Swing KeyListener接口
Swing FocusAdapter類
Swing JColorChooser
Swing ImageIcon
Swing JComboBox
Swing GroupLayout布局類
Swing JOptionPane
Swing GridBagLayout布局類
Swing JMenuItem類
Swing MouseListener Interface
Swing事件適配器
SWING ComponentEvent處理類
SWING PaintEvent事件類
Swing FlowLayout布局類
SWING Event事件類
Swing FocusListener接口
Swing控件
Swing JButton
Swing JCheckBox
Swing SpringLayout布局類
Swing容器
Swing事件處理
Swing事件監(jiān)聽(tīng)器
Swing Menu菜單類
Swing JList
Swing ContainerListener接口
Swing LayoutManager2接口
Swing JFrame類和實(shí)例
Swing JTextArea
SWING InputEvent事件類
Swing BorderLayout布局
Swing WindowListener接口
Swing JCheckboxMenuItem類及例子
Swing JSpinner
Swing GridLayout布局類
Swing JPopupMenu類及實(shí)例

Swing事件處理

什么是事件?

一個(gè)對(duì)象的狀態(tài)變化被稱為事件,即事件描述源狀態(tài)的變化。事件產(chǎn)生的結(jié)果與用戶交互的圖形用戶界面組件。例如,點(diǎn)擊一個(gè)按鈕,移動(dòng)鼠標(biāo),通過(guò)鍵盤(pán)輸入一個(gè)字符,從列表中選擇一個(gè)項(xiàng)目,滾動(dòng)頁(yè)面的活動(dòng),使一個(gè)事件的發(fā)生。

事件的類型

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

  • 前臺(tái)事件 - 這些事件需要用戶直接互動(dòng)。在圖形用戶界面中的圖形組件交互的人產(chǎn)生的后果。例如,點(diǎn)擊一個(gè)按鈕,移動(dòng)鼠標(biāo),通過(guò)鍵盤(pán)輸入一個(gè)字符,從列表中選擇一個(gè)項(xiàng)目,滾動(dòng)頁(yè)面等

  • 后臺(tái)事件 - 這些事件,需要最終用戶的交互是已知的作為背景的事件。操作系統(tǒng)的中斷,硬件或軟件故障,定時(shí)器到期時(shí),操作完成的背景事件的例子。

事件處理是什么?

事件處理機(jī)制,控制的事件,并決定如果一個(gè)事件發(fā)生時(shí),會(huì)發(fā)生什么。這種機(jī)制被稱為事件處理程序,在事件發(fā)生時(shí)執(zhí)行的代碼。 Java使用代理事件模型來(lái)處理事件。該模型定義了標(biāo)準(zhǔn)的機(jī)制來(lái)生成和處理事件。讓我們簡(jiǎn)要介紹這種模式。

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

  •  - 源是一個(gè)對(duì)象,在該對(duì)象上的事件發(fā)生。它的處理器提供發(fā)生事件的信息來(lái)源是可靠的。 JAVA提供與源對(duì)象的類。

  • 監(jiān)聽(tīng)器 - 它也被稱為作為事件handler.Listener是負(fù)責(zé)產(chǎn)生響應(yīng)一個(gè)事件。從Java實(shí)現(xiàn)的角度來(lái)看,監(jiān)聽(tīng)器也是一個(gè)對(duì)象。等待直到它接收到一個(gè)事件監(jiān)聽(tīng)器。一旦收到事件,監(jiān)聽(tīng)器進(jìn)程的事件就返回。

這種方法的好處是,用戶界面邏輯完全分開(kāi),生成該事件的邏輯。用戶界面元素是能夠委派的事件處理單獨(dú)的一段代碼。在這個(gè)模型中,需要與源對(duì)象注冊(cè)監(jiān)聽(tīng)使偵聽(tīng)器能夠接收事件通知。這是一個(gè)有效的方式處理事件,因?yàn)檫@些事件通知只發(fā)送給那些監(jiān)聽(tīng)器要接收他們。

參與事件處理的步驟

  • 用戶單擊該按鈕時(shí)產(chǎn)生該事件。

  • 現(xiàn)在有關(guān)事件類的對(duì)象是自動(dòng)創(chuàng)建的信息源和事件在同一對(duì)象得到填充。

  • 事件對(duì)象被轉(zhuǎn)發(fā)注冊(cè)監(jiān)聽(tīng)器類的方法。

  • 該方法現(xiàn)在得到執(zhí)行并返回。

要記住的要點(diǎn)有關(guān)監(jiān)聽(tīng)器

  • 為了設(shè)計(jì)一個(gè)監(jiān)聽(tīng)類,我們必須開(kāi)發(fā)一些監(jiān)聽(tīng)器接口。這些監(jiān)聽(tīng)器接口預(yù)測(cè)一些公共的抽象監(jiān)聽(tīng)器類必須實(shí)現(xiàn)的回調(diào)方法。

  • 如果不執(zhí)行任何預(yù)定義的接口,類不能作為源對(duì)象的監(jiān)聽(tīng)器類。

回調(diào)方法

這些方法所提供的API提供程序,被定義為應(yīng)用程序員和應(yīng)用程序開(kāi)發(fā)者調(diào)用。這里的回調(diào)方法代表一個(gè)事件的方法。在響應(yīng)一個(gè)事件的Java JRE將觸發(fā)回調(diào)方法。所有這些回調(diào)方法的監(jiān)聽(tīng)器接口。

如果一個(gè)組件需要一些監(jiān)聽(tīng)器會(huì)聽(tīng)的事件源必須注冊(cè)自己監(jiān)聽(tīng)。

事件處理例子

選擇使用任何編輯器創(chuàng)建以下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上一篇:Swing FocusAdapter類下一篇:Swing JMenuBar類