欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中的AWT事件處理問題

 更新時間:2022年11月14日 17:02:22   作者:SongYuLong的博客  
這篇文章主要介紹了java中的AWT事件處理問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

事件處理的過程中,主要涉及3類對象

  • Event Source(事件源):事件發(fā)生的聲所,如按鈕,窗口,菜單等組件。
  • Event(事件):事件封裝了GUI組件上發(fā)生的特定事情(通常是一次用打操作)。
  • Event Listener(事件監(jiān)聽器):負責監(jiān)聽事件源所發(fā)生的事件,并對各種事件做出響應(yīng)處理。

實現(xiàn)AWT事件處理機制的步驟如下

1.實現(xiàn)事件監(jiān)聽器類,該監(jiān)聽器類是一個特殊的java類,必須實現(xiàn)一個XxxListener接口。

2.創(chuàng)建普通組件(事件源),創(chuàng)建事件監(jiān)聽器對象。

3.調(diào)用addXxxListener()方法將事件監(jiān)聽器對象注冊給普通組件(事件源)。當事件源上發(fā)生指定事件時,AWT會觸發(fā)事件監(jiān)聽器,由事件監(jiān)聽器調(diào)用相應(yīng)的方法(事件處理器)來處理事件,事件源上所發(fā)生的事件會作為參數(shù)傳入事件處理器。

AWT的事件類都是AWTEvent類的子類,AWTEvent是EventObject的子類。

AWT事件分為兩在類:低級事件和高組事件

1.低級事件

低級事件是指基于特定動作的事件.比如進入,點擊,拖入等動作的鼠標事件,當組件得到焦點失去焦點時觸發(fā)的事件.

  • ComponentEvent:組件事件,當組件尺寸發(fā)生變化,位置發(fā)生移動,顯示/隱藏狀態(tài)發(fā)生改變時觸發(fā)該事件.
  • ContainerEvent:容器事件,當容器里發(fā)生添加級件,刪除組件時觸發(fā)該事件。
  • WindowEvent:窗口事件,當窗口狀態(tài)發(fā)生改變(如打開,關(guān)閉,最大化,最小化)時觸發(fā)該事件。
  • FocusEvent:焦點事件,當級件得到焦點或失去焦點時觸發(fā)該事件。
  • KeyEvent:鍵盤事件,當按鍵被按下,松開單擊時觸發(fā)該事件。
  • MouseEvent:鼠標事件,當進行單擊,按下,松開,移動鼠標等動作時觸發(fā)該事件。
  • PaintEvent:組件繪制事件,該事件是一件特殊的事件類型,當GUI組件調(diào)用update/paint方法來呈現(xiàn)自身時觸發(fā)該事件,該事件并非專用于事件處理模型。

2.高級事件(語義事件)

高級事件是基于語義的事件,它可以不和特定的動作相關(guān)聯(lián),而依賴于觸發(fā)此事件的類。

比如,在TextField中按Enter鍵會觸發(fā)ActionEvent事件,在滑動條上稱動滑塊會觸發(fā)AdjustmentEvent事件,選中項目列表的某一項就會觸發(fā)ItemEvent事件。

  • ActionEvent:動作事件,當按鈕,菜單項被單擊,在TextField中按Enter鍵時觸發(fā)該事件。
  • AdjustmentEvent:調(diào)節(jié)事件,在滑動條上稱動滑塊以調(diào)節(jié)數(shù)值時觸發(fā)該事件。
  • ItemEvent:選項事件,當用戶選中某項,或取消選中某項時觸發(fā)該事件。
  • TextEvent:文本事件,當文本框,文本域里的文本發(fā)生改變時觸發(fā)該事件。

一件級件被多個監(jiān)聽器監(jiān)聽:

package javaAWT;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MultiListener {

    private Frame frame = new Frame("MultiListener");
    private TextArea textArea = new TextArea(10, 35);
    private Button btn1 = new Button("one");
    private Button btn2 = new Button("two");

    public void init() {
        FirstListener f1 = new FirstListener();
        btn1.addActionListener(f1);
        btn1.addActionListener(new SecondListener());
        btn2.addActionListener(f1);
        frame.add(textArea);
        Panel panel = new Panel();
        panel.add(btn1);
        panel.add(btn2);
        frame.add(panel, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    class FirstListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            textArea.append("FirstListener, EventSource :" + e.getActionCommand() + "\n");
        }
    }

    class SecondListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            textArea.append("Clicked:" + e.getActionCommand() + " Button\n");
        }
    }

    public static void main(String[] args) {
        new MultiListener().init();
    }
}

窗口監(jiān)聽 (WindowListener ):

package javaAWT;

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class WindowListenerTest {

    private Frame frame = new Frame("WindowListener");
    private TextArea tArea = new TextArea(6, 40);

    public void init() {
        frame.addWindowListener(new MyListener());
        frame.add(tArea);
        frame.pack();
        frame.setVisible(true);
    }

    class MyListener implements WindowListener {

        @Override
        public void windowOpened(WindowEvent e) {
            // TODO Auto-generated method stub
            tArea.append("窗口初次打開\n");
        }

        @Override
        public void windowClosing(WindowEvent e) {
            // TODO Auto-generated method stub
            tArea.append("關(guān)閉窗口\n");
            System.exit(0);
        }

        @Override
        public void windowClosed(WindowEvent e) {
            // TODO Auto-generated method stub
            System.out.println("窗口被關(guān)閉");
        }

        @Override
        public void windowIconified(WindowEvent e) {
            // TODO Auto-generated method stub
            tArea.append("窗口最小化\n");
        }

        @Override
        public void windowDeiconified(WindowEvent e) {
            // TODO Auto-generated method stub
            tArea.append("窗口恢復\n");
        }

        @Override
        public void windowActivated(WindowEvent e) {
            // TODO Auto-generated method stub
            tArea.append("窗口被激活\n");
        }

        @Override
        public void windowDeactivated(WindowEvent e) {
            // TODO Auto-generated method stub
            tArea.append("窗口失去焦點\n");
        }

    }

    public static void main(String[] args) {
        new WindowListenerTest().init();
    }
}

事件適配器

事件適配器是監(jiān)聽器接口的空實現(xiàn)–事件適配器實現(xiàn)了監(jiān)聽器接口,并為該接口里的每個方法都提供了實現(xiàn),這種實現(xiàn)是一種空實現(xiàn)。

監(jiān)聽器接口和事件適配器對應(yīng)表

監(jiān)聽器接口事件適配器
ContainerListenerContainerAdapter
FocusListenerFocusAdapter
ComponentListenerComponentAdapter
KeyListenerKeyAdapter
MouseListenerMouseAdapter
MousMotionListenerMouseMotionAdapter
WindowListenerWindowAdapter

實現(xiàn)事件監(jiān)聽器有如下幾種形式

1.內(nèi)部類形式:將事件監(jiān)聽器類定義成當前類的內(nèi)部類。

2.外部類形式:將事件監(jiān)聽器類定義成一個外部類。

3.類本身作為事件監(jiān)聽器類:讓當前類本身實現(xiàn)監(jiān)聽器接口或繼承事件適配器。

4.匿名內(nèi)部類形式:使用匿名內(nèi)部類創(chuàng)建事件監(jiān)聽器對象。

內(nèi)部類形式

package javaAWT;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Image;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;

public class WindowAdapterTest {

    private Frame frame = new Frame("WindowAdapterTest");
    private TextArea textArea = new TextArea(6, 40);
    private ImageIcon imageIcon = new ImageIcon();


    public void init() {
        frame.addWindowListener(new MyAdapterListener());
        frame.add(textArea);
        Image image = Toolkit.getDefaultToolkit().getImage("./123.jpg");
        frame.setIconImage(image);
        frame.pack();
        frame.setVisible(true);
    }

    class MyAdapterListener extends WindowAdapter {
        @Override
        public void windowClosed(WindowEvent e) {
            // TODO Auto-generated method stub
            //super.windowClosed(e);
            System.out.println("Closed window");
            System.exit(0);
        }
    }

    public static void main(String[] args) {
        new WindowAdapterTest().init();
    }
}

外部類形式

外部類監(jiān)聽器

package javaAWT;

import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MailerListener implements ActionListener {
    private TextField mailAddress;

    public MailerListener(TextField mailAddress) {
        // TODO Auto-generated constructor stub
        this.mailAddress = mailAddress;
    }

    public void setMailAddress(TextField mailAddress) {
        this.mailAddress = mailAddress;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.out.println("goto "+mailAddress.getText() + " send eMail");
    }

}

使用外部監(jiān)聽器

package javaAWT;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextField;

import org.omg.CORBA.PRIVATE_MEMBER;

public class SendMailer {

    private Frame frame = new Frame("SendMailer");
    private TextField tField = new TextField(40);
    private Button send = new Button("Send");

    public void init() {
        send.addActionListener(new MailerListener(tField));
        frame.add(tField);
        frame.add(send, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);

    }


    public static void main(String[] args) {
        new SendMailer().init();
    }
}

類本身作為事件監(jiān)聽器類

GUI類通過繼承事件適配器方式(extends XxxAdapter),可以只實現(xiàn)需要的監(jiān)聽器事件處理方法。

package javaAWT;

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;

public class SimpleEventHandler extends WindowAdapter {

    private Frame frame = new Frame("WindowAdapter");
    private TextArea tArea = new TextArea(6, 40);
    public void init() {
        //將該類的默認對象作為事件監(jiān)聽對象
        frame.addWindowListener(this);
        frame.add(tArea);
        frame.pack();
        frame.setVisible(true);
    }

    // GUI 界面類直接包含事件處理器方法
    @Override
    public void windowClosing(WindowEvent e) {
        // TODO Auto-generated method stub
        super.windowClosing(e);
        System.out.println("Window closed");
        System.exit(0);
    }

    public static void main(String[] args) {

    }
}

GUI類通過實現(xiàn)事件監(jiān)聽器方式( implements XxxListener),需要實現(xiàn)監(jiān)聽器的所有事件處理方法。

package javaAWT;

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.text.TabableView;

public class SimpleEventHandlerB implements WindowListener {

    private Frame f = new Frame("WindowListener");
    private TextArea ta = new TextArea(10, 50);

    public void init() {
        f.addWindowListener(this);
        f.add(ta);
        f.pack();
        f.setVisible(true);
    }

    @Override
    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowOpened"+"\n");
    }

    @Override
    public void windowClosing(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowClosing"+"\n");
        System.exit(0);
    }

    @Override
    public void windowClosed(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowClosed"+"\n");

    }

    @Override
    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowIconified"+"\n");
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowDeiconified"+"\n");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowActivated"+"\n");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        // TODO Auto-generated method stub
        ta.append("windowDeactivated"+"\n");
    }


    public static void main(String[] args) {
        new SimpleEventHandlerB().init();
    }

}

匿名內(nèi)部類形式

匿名實現(xiàn)XxxxAdapter對象

package javaAWT;

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AnonymousEventHandler {

    private Frame frame = new Frame("AnonymousEventHandler");
    private TextArea textArea = new TextArea(5, 20);
    public void init() {

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                super.windowClosing(e);
                System.exit(0);
            }
        });

        frame.add(textArea);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new AnonymousEventHandler().init();
    }
}

匿名實現(xiàn)XxxListener對象

package javaAWT;

import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class AnonymousEventHandlerB {

    private Frame frame = new Frame("AnonymousEventHandlerB");
    private TextArea textArea = new TextArea(5, 50);

    public void init() {
        frame.addWindowListener(new WindowListener() {

            @Override
            public void windowOpened(WindowEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowIconified(WindowEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowDeactivated(WindowEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowClosing(WindowEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }

            @Override
            public void windowClosed(WindowEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowActivated(WindowEvent e) {
                // TODO Auto-generated method stub

            }
        });

        frame.add(textArea);
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        new AnonymousEventHandlerB().init();
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解FutureTask如何實現(xiàn)最大等待時間

    詳解FutureTask如何實現(xiàn)最大等待時間

    這篇文章主要為大家詳細介紹了如何從源碼中了解FutureTask實現(xiàn)最大等待時間的方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-03-03
  • Java單鏈表的增刪改查與面試題詳解

    Java單鏈表的增刪改查與面試題詳解

    單鏈表是鏈表的其中一種基本結(jié)構(gòu)。一個最簡單的結(jié)點結(jié)構(gòu)如圖所示,它是構(gòu)成單鏈表的基本結(jié)點結(jié)構(gòu)。在結(jié)點中數(shù)據(jù)域用來存儲數(shù)據(jù)元素,指針域用于指向下一個具有相同結(jié)構(gòu)的結(jié)點。 因為只有一個指針結(jié)點,稱為單鏈表
    2022-09-09
  • SpringBoot中的6種API請求參數(shù)讀取方式總結(jié)

    SpringBoot中的6種API請求參數(shù)讀取方式總結(jié)

    使用Spring Boot開發(fā)API的時候,讀取請求參數(shù)是服務(wù)端編碼中最基本的一項操作,Spring Boot中也提供了多種機制來滿足不同的API設(shè)計要求,通過本文,為大家總結(jié)6種常用的請求參數(shù)讀取方式,需要的朋友可以參考下
    2024-07-07
  • Springboot啟動同時創(chuàng)建數(shù)據(jù)庫和表實現(xiàn)方法

    Springboot啟動同時創(chuàng)建數(shù)據(jù)庫和表實現(xiàn)方法

    這篇文章主要介紹了Springboot啟動同時創(chuàng)建數(shù)據(jù)庫和表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • 一文帶你掌握Java?LinkedBlockingQueue

    一文帶你掌握Java?LinkedBlockingQueue

    LinkedBlockingQueue?是一個可選有界阻塞隊列,這篇文章主要為大家詳細介紹了Java中LinkedBlockingQueue的實現(xiàn)原理與適用場景,感興趣的可以了解一下
    2023-04-04
  • java 地心坐標系(ECEF)和WGS-84坐標系(WGS84)互轉(zhuǎn)的實現(xiàn)

    java 地心坐標系(ECEF)和WGS-84坐標系(WGS84)互轉(zhuǎn)的實現(xiàn)

    這篇文章主要介紹了java 地心坐標系(ECEF)和WGS-84坐標系(WGS84)互轉(zhuǎn)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • JVM教程之內(nèi)存管理和垃圾回收(三)

    JVM教程之內(nèi)存管理和垃圾回收(三)

    這篇文章主要介紹了JVM學習筆記的第三篇內(nèi)存管理和垃圾回收,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java微信分享接口開發(fā)詳解

    Java微信分享接口開發(fā)詳解

    這篇文章主要為大家詳細介紹了Java微信分享接口開發(fā)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • SpringBoot Session共享實現(xiàn)圖解

    SpringBoot Session共享實現(xiàn)圖解

    這篇文章主要介紹了SpringBoot Session共享實現(xiàn)圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • Java?try?catch語句異常處理詳解

    Java?try?catch語句異常處理詳解

    這篇文章主要給大家介紹了關(guān)于Java?try?catch語句異常處理的相關(guān)資料,Java中的try-catch用于捕獲和處理異常,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11

最新評論