熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java圖形界面事件監聽處理之四種方法

2013-11-23 18:58:30  來源: Java核心技術 

  我自年上大學開始學習Java由於JavaSE的GUI編程不是很占優勢因而也沒有重視過尤其是事件監聽處理綜合看過很多Java講師的視頻以及網上相關資料特綜合一下望對大家有幫助尤其是Java事件編程初學者願大家看後不再猶豫用哪種方法而發愁

  大家先看看簡單的應用程序截圖考慮一下如何實現

  截圖如圖一圖二圖三

  

  圖一 初始界面截圖

  

  圖二 藍色按鈕事件處理

  

  圖三 彈窗按鈕事件處理

  在此列舉四種方法

  自身類實現ActionListener接口作為事件監聽器

  通過匿名類處理

  通過內部類處理

  通過外部類處理

  下面依次介紹

  第一種自身類實現ActionListener接口作為事件監聽器

  這種方法是最基本的也是初學者經常使用的我當初即是如此

  import javaawtColor;

  import javaawtContainer;

  import javaawtFlowLayout;

  import javaawteventActionEvent;

  import javaawteventActionListener;

  import javaxswingJButton;

  import javaxswingJDialog;

  import javaxswingJFrame;

  public class EventListener extends JFrame implements ActionListener {

  private JButton btBlue btDialog;

  /**

  * Java事件監聽處理——自身類實現ActionListener接口作為事件監聽器

  *

  * @author codebrother

  */

  // 構造方法

  public EventListener() {

  // 設置標題欄內容

  setTitle(Java GUI 事件監聽處理);

  // 設置初始化窗口位置

  setBounds( );

  // 設置窗口布局

  setLayout(new FlowLayout());

  // 創建按鈕對象

  btBlue = new JButton(藍色);

  // 將按鈕添加事件監聽器

  btBlueaddActionListener(this);

  // 創建按鈕對象

  btDialog = new JButton(彈窗);

  // 將按鈕添加事件監聽器

  btDialogaddActionListener(this);

  // 把按鈕容器添加到JFrame容器上

  add(btBlue);

  add(btDialog);

  // 設置窗口可視化

  setVisible(true);

  // 設置窗口關閉

  setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

  }

  // ***************************事件處理***************************

  @Override

  public void actionPerformed(ActionEvent e) {

  // 判斷最初發生Event事件的對象

  if (egetSource() == btBlue) {

  // 獲得容器

  Container c = getContentPane();

  // 設置容器背景顏色

  csetColorBLUE);

  }

  else if (egetSource() == btDialog) {

  // 創建JDialog窗口對象

  JDialog dialog = new JDialog();

  dialogsetBounds( );

  dialogsetVisible(true);

  }

  }

  // ***************************主方法***************************

  public static void main(String[] args) {

  new EventListener();

  }

  }

  第二種通過匿名類處理

  這是比較好的一種方法我是在年開始使用這種方法的

  import javaawtColor;

  import javaawtContainer;

  import javaawtFlowLayout;

  import javaawteventActionEvent;

  import javaawteventActionListener;

  import javaxswingJButton;

  import javaxswingJDialog;

  import javaxswingJFrame;

  public class EventListener extends JFrame {

  private JButton btBlue btDialog;

  /**

  * Java事件監聽處理——匿名類處理

  *

  * @author codebrother

  */

  // 構造方法

  public EventListener() {

  // 設置標題欄內容

  setTitle(Java GUI 事件監聽處理);

  // 設置初始化窗口位置

  setBounds( );

  // 設置窗口布局

  setLayout(new FlowLayout());

  // 創建按鈕對象

  btBlue = new JButton(藍色);

  // 添加事件監聽器(此處即為匿名類)

  btBlueaddActionListener(new ActionListener() {

  // 事件處理

  @Override

  public void actionPerformed(ActionEvent e) {

  // 獲得容器設置容器背景顏色

  Container c = getContentPane();

  csetColorBLUE);

  }

  });

  // 創建按鈕對象並添加事件監聽器

  btDialog = new JButton(彈窗);

  btDialogaddActionListener(new ActionListener() {

  // 事件處理

  @Override

  public void actionPerformed(ActionEvent e) {

  // 創建JDialog窗口對象

  JDialog dialog = new JDialog();

  dialogsetBounds( );

  dialogsetVisible(true);

  }

  });

  // 把按鈕容器添加到JFrame容器上

  add(btBlue);

  add(btDialog);

  // 設置窗口可視化

  setVisible(true);

  // 設置窗口關閉

  setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

  }

  // ***************************主方法***************************

  public static void main(String[] args) {

  new EventListener();

  }

  }

  第三種通過內部類處理

  該種方法更符合面向對象編程的思想

  import javaawtColor;

  import javaawtContainer;

  import javaawtFlowLayout;

  import javaawteventActionEvent;

  import javaawteventActionListener;

  import javaxswingJButton;

  import javaxswingJDialog;

  import javaxswingJFrame;

  public class EventListener extends JFrame {

  private JButton btBlue btDialog;

  /**

  * Java事件監聽處理——內部類處理

  *

  * @author codebrother

  */

  // 構造方法

  public EventListener() {

  // 設置標題欄內容

  setTitle(Java GUI 事件監聽處理);

  // 設置初始化窗口位置

  setBounds( );

  // 設置窗口布局

  setLayout(new FlowLayout());

  // 創建按鈕對象

  btBlue = new JButton(藍色);

  // 添加事件監聽器對象(面向對象思想)

  btBlueaddActionListener(new ColorEventListener());

  btDialog = new JButton(彈窗);

  btDialogaddActionListener(new DialogEventListener());

  // 把按鈕容器添加到JFrame容器上

  add(btBlue);

  add(btDialog);

  // 設置窗口可視化

  setVisible(true);

  // 設置窗口關閉

  setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

  }

  // 內部類ColorEventListener實現ActionListener接口

  class ColorEventListener implements ActionListener {

  @Override

  public void actionPerformed(ActionEvent e) {

  Container c = getContentPane();

  csetColorBLUE);

  }

  }

  // 內部類DialogEventListener實現ActionListener接口

  class DialogEventListener implements ActionListener {

  @Override

  public void actionPerformed(ActionEvent e) {

  // 創建JDialog窗口對象

  JDialog dialog = new JDialog();

  dialogsetBounds( );

  dialogsetVisible(true);

  }

  }

  // ***************************主方法***************************

  public static void main(String[] args) {

  new EventListener();

  }

  }

  第四種通過外部類處理

  這種我個人不常用

  import javaawtColor;

  import javaawtContainer;

  import javaawtFlowLayout;

  import javaawteventActionEvent;

  import javaawteventActionListener;

  import javaxswingJButton;

  import javaxswingJDialog;

  import javaxswingJFrame;

  public class EventListener extends JFrame {

  private JButton btBlue btDialog;

  /**

  * Java事件監聽處理——外部類處理

  *

  * @author codebrother

  */

  // 構造方法

  public EventListener() {

  // 設置標題欄內容

  setTitle(Java GUI 事件監聽處理);

  // 設置初始化窗口位置

  setBounds( );

  // 設置窗口布局

  setLayout(new FlowLayout());

  // 創建按鈕對象

  btBlue = new JButton(藍色);

  // 將按鈕添加事件監聽器

  btBlueaddActionListener(new ColorEventListener(this));

  // 創建按鈕對象

  btDialog = new JButton(彈窗);

  // 將按鈕添加事件監聽器

  btDialogaddActionListener(new DialogEventListener());

  // 把按鈕容器添加到JFrame容器上

  add(btBlue);

  add(btDialog);

  // 設置窗口可視化

  setVisible(true);

  // 設置窗口關閉

  setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

  }

  // ***************************主方法***************************

  public static void main(String[] args) {

  new EventListener();

  }

  }

  // 外部類ColorEventListener實現ActionListener接口

  class ColorEventListener implements ActionListener {

  private EventListener el;

  ColorEventListener(EventListener el) {

  thisel = el;

  }

  @Override

  public void actionPerformed(ActionEvent e) {

  Container c = elgetContentPane();

  csetColorBLUE);

  }

  }

  // 外部類DialogEventListener實現ActionListener接口

  class DialogEventListener implements ActionListener {

  @Override

  public void actionPerformed(ActionEvent e) {

  // 創建JDialog窗口對象

  JDialog dialog = new JDialog();

  dialogsetBounds( );

  dialogsetVisible(true);

  }

  }

  你可能注意到為什麼我寫了兩個監聽事件就是加以區分這些方法的區別

  第一種的監聽處理部分如果有多個(我就寫過三十多個的事件監聽包含菜單欄按鈕事件監聽和工具欄按鈕事件監聽)那就需要一個個去判斷從理論上說是影響程序速度的

  第二種和第三種比較常用如果程序的監聽事件比較少可以用第二種匿名類很合適

  第三種符合面向對象編程(可以設置內部類只提供自身類使用而且方便使用自身類的資源)尤其是適合多個監聽事件的處理當然也適合第二種方法情況

  第四種是外部類如果多個監聽事件相同就可以選用此種方法

  個人愚見建議初學者掌握這四種方法側重於第二三種怎麼學不重要重要的是達到目的使自己的GUI編程運用自如多編程多思考提升編程思想多看別人的代碼取其精華有很大幫助!


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26053.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.