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

基于Java?GUI?事件處理方式

 更新時(shí)間:2021年12月04日 14:25:16   作者:TYUT?ljk  
這篇文章主要介紹了基于Java?GUI?事件處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

事件處理主要涉及:事件源,事件,事件處理者

在GUI中事件源是事件發(fā)生的場(chǎng)所,通常是各個(gè)組件,如被單擊的按鈕;事件是用戶對(duì)界面的操作,如操作鍵盤是觸發(fā)的鍵盤事件;而事件處理者則是對(duì)收到的事件經(jīng)行處理的程序,也稱監(jiān)聽(tīng)器。

java.awt.event包中實(shí)現(xiàn)對(duì)事件處理的相關(guān)類和接口

  • 以Event結(jié)尾的類:事件類,如ActionEvent , WindowEvent , MouseEvent , KeyEvent
  • 以Listener結(jié)尾的接口:是一些與特定事件相關(guān)的的監(jiān)聽(tīng)器接口,每個(gè)接口都定義了需要特定監(jiān)聽(tīng)器實(shí)現(xiàn)的方法,是事件處理者的具體實(shí)現(xiàn),如ActionListener , WindowListener ,MouseListerer , KeyListener
  • 以Adapter結(jié)尾的類(即適配器類):是一些已經(jīng)實(shí)現(xiàn)了所有方法的特殊接口,是為了簡(jiǎn)化代碼引入的一種監(jiān)聽(tīng)器手段,只需要重寫需要的方法即可。但是由于Java的單繼承特性,如果要使用多種監(jiān)聽(tīng)器或此類已經(jīng)有了父類則無(wú)法繼承適配器類了,如 WindowAdapter , MouseAdapter , KeyListener , 無(wú) ActionEvent

注意:

事件處理者,即監(jiān)聽(tīng)器為了能夠處理某種類型的事件,必須實(shí)現(xiàn)與該事件類型相對(duì)的接口,即成為一個(gè)實(shí)現(xiàn)某接口的類對(duì)象。

事件是通過(guò)事件處理者包含的方法傳入的,而該方法就是實(shí)現(xiàn)接口時(shí)必須實(shí)現(xiàn)的方法。

如ActionListener接口中的 void actionPerformed( ActionEvent e )方法。

如:?jiǎn)螕舭粹o對(duì) 應(yīng)于動(dòng)作事件即(ActionEvent),按鈕事件處理者是實(shí)現(xiàn)例動(dòng)作事件對(duì)應(yīng)的Listener接口的 類對(duì)象,需要調(diào)用按鈕的addActionListener()方法注冊(cè),該類是重寫ActionListener 接口中的void actionPerformed( ActionEvent e )方法

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame("理解事件處理");
        frame.setDefaultCloseOperation(3);
        frame.setLayout(null);
 
        //創(chuàng)建按鈕對(duì)象
        JButton button = new JButton("請(qǐng)單擊本次按鈕");
        button.setBounds(120,60,120,30);
        frame.add(button);
        //創(chuàng)建按鈕監(jiān)聽(tīng)器并注冊(cè),參數(shù)為事件處理者對(duì)象
        ButtonHandler buttonHandler = new ButtonHandler();
        button.addActionListener(buttonHandler);//與單擊事件相關(guān)的授權(quán)處理的方法
 
        frame.setBounds(400,200,400,200);
        frame.setVisible(true);
    }
}
 
class ButtonHandler implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        System.out.println("單擊一次按鈕");
    }
}

效果圖:

從上例中可以看出編寫事件處理可大致分為三步:

  • 第一步:創(chuàng)建某組件對(duì)象,并考慮該組件對(duì)象與哪個(gè)或哪些事件相關(guān)。如創(chuàng)建按鈕對(duì)象,相關(guān)的事件是動(dòng)作事件,即ActionEvent。
  • 第二步:編寫該組件對(duì)象的事件處理者類,即實(shí)現(xiàn)要處理事件對(duì)應(yīng)的監(jiān)聽(tīng)器接口,如編寫事件處理者ButtonHandler類,實(shí)現(xiàn)ActionEvent對(duì)應(yīng)的ActionListener接口,具體來(lái)說(shuō)就是實(shí)現(xiàn)接口中的void actionPerformed( ActionEvent e )方法,在該方法中加入處理事件的代碼。
  • 第三步:創(chuàng)建事件處理者類的實(shí)例,并調(diào)用組件對(duì)象的對(duì)應(yīng)該類事件的添加方法來(lái)注冊(cè)監(jiān)聽(tīng)器,如調(diào)用按鈕的addActionListener( ActionListener 1) 方法添加 ButtonHandler類實(shí)例。

例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Test{
    public static void main(String[] args) {
        JFrame frame = new JFrame("深入掌握事件處理");
        frame.setDefaultCloseOperation(3);
        frame.setLayout(null);
        //創(chuàng)建提示 信息
        JLabel label1 = new JLabel("請(qǐng)?jiān)诖绑w內(nèi)移動(dòng)鼠標(biāo)");
        label1.setBounds(15,5,200,25);
        frame.add(label1);
        JLabel label2 = new JLabel("或按住鼠標(biāo)左鍵拖動(dòng)鼠標(biāo)");
        label2.setBounds(15,30,200,25);
        frame.add(label2);
        //創(chuàng)建文本框?qū)ο螅瑱z測(cè)
        JTextField text = new JTextField(30);
        text.setBounds(15,55,200,30);
        frame.add(text);
        //注冊(cè)監(jiān)聽(tīng)器,參數(shù)為事件處理者對(duì)象
        MouseListenerImp mouse = new MouseListenerImp(text);//事件處理者類  實(shí)例化
        frame.addMouseListener(mouse);
        frame.addMouseMotionListener(mouse);
        frame.addWindowListener(mouse); 
        frame.setBounds(500,250,300,150);
        frame.setVisible(true);
    }
}
 
//編寫事件處理對(duì)象類  實(shí)現(xiàn)鼠標(biāo)窗體的相關(guān)接口
class MouseListenerImp implements MouseListener, MouseMotionListener, WindowListener{
    JTextField text; 
    public MouseListenerImp(JTextField text){
        this.text = text;
    }
    public void mouseDragged(MouseEvent e){ //提供拖拽時(shí)的鼠標(biāo)坐標(biāo)
        String s = "托拽鼠標(biāo),坐標(biāo): x =" + e.getX() + "y = " + e.getY();
        text.setText(s);//在文本框中可輸出
    }
    public void mouseEntered(MouseEvent e) {  //檢查鼠標(biāo)是否在窗體內(nèi)
        String s = "鼠標(biāo)離開(kāi)了窗體";
        text.setText(s);//在文本框中可輸出
    }
    public void mouseExited(MouseEvent e) {   //檢查鼠標(biāo)是否在窗體內(nèi)
        String s = "鼠標(biāo)進(jìn)入了窗體";
        text.setText(s);//在文本框中可輸出
    }
    public void windowClosing(WindowEvent e) {//為了式窗口能正常關(guān)閉
        System.exit(1);
    }
    //不打算實(shí)現(xiàn)的方法,但是因?yàn)閷?shí)現(xiàn)接口,所以要寫出來(lái)
    public void mouseMoved(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void windowOpened(WindowEvent e){}
    public void windowClosed(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowActivated(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}
}

效果圖:

上述代碼的class MouseListenerImp implements MouseListener, MouseMotionListener, WindowListener 同時(shí)實(shí)現(xiàn)了三個(gè)接口,要實(shí)現(xiàn)接口需要寫全部重寫接口中的方法,但如果將其中某個(gè)接口用Adapter類 代替則可有】?jī)?yōu)化代碼 即 extends MouseAdapter

事件的種類:

  • 組件事件ComponentEvent:組件尺寸的變化和移動(dòng)
  • 容器事件ContainerEvent:組件增加或移動(dòng)
  • 窗口事件WindowEvent:關(guān)閉窗口,激活窗口閉合,最大化,最小化
  • 焦點(diǎn)事件FocusEvent:焦點(diǎn)的獲得與失去
  • 鍵盤事件KeyEvent:鍵的按下或釋放
  • 鼠標(biāo)事件MouseEvent:鼠標(biāo)單擊與移動(dòng)
  • 動(dòng)作事件ActionEvent:?jiǎn)螕舭粹o,在文本框中按Enter鍵
  • 項(xiàng)目事件ItemEvent:從選擇框或列表框中選擇一項(xiàng)
  • 調(diào)節(jié)事件AdjustEvent:移滾動(dòng)條上的滑塊以調(diào)節(jié)數(shù)值
  • 文本事件TextEvent:文本對(duì)象的改變

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

相關(guān)文章

  • 詳解JVM中的本機(jī)內(nèi)存跟蹤

    詳解JVM中的本機(jī)內(nèi)存跟蹤

    在本文里小編給大家整理了一篇關(guān)于JVM中的本機(jī)內(nèi)存跟蹤的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-07-07
  • Spring Cloud 優(yōu)雅下線以及灰度發(fā)布實(shí)現(xiàn)

    Spring Cloud 優(yōu)雅下線以及灰度發(fā)布實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud 優(yōu)雅下線以及灰度發(fā)布實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • spring boot配置多個(gè)請(qǐng)求服務(wù)代理的完整步驟

    spring boot配置多個(gè)請(qǐng)求服務(wù)代理的完整步驟

    這篇文章主要給大家介紹了關(guān)于spring boot配置多個(gè)請(qǐng)求服務(wù)代理的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java中的原生post請(qǐng)求方式

    Java中的原生post請(qǐng)求方式

    這篇文章主要介紹了Java中的原生post請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 深入理解Hibernate中的懶加載異常及解決方法

    深入理解Hibernate中的懶加載異常及解決方法

    這篇文章主要為大家介紹了深入理解Hibernate中的懶加載異常及解決方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-10-10
  • Mybatis超詳細(xì)講解構(gòu)建SQL方法

    Mybatis超詳細(xì)講解構(gòu)建SQL方法

    這篇文章主要為大家詳細(xì)介紹了Mybatis構(gòu)建SQL,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-07-07
  • Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法

    Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法

    這篇文章主要介紹了Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring框架中IoC容器與DI依賴注入教程

    Spring框架中IoC容器與DI依賴注入教程

    IOC也是Spring的核心之一了,之前學(xué)的時(shí)候是采用xml配置文件的方式去實(shí)現(xiàn)的,后來(lái)其中也多少穿插了幾個(gè)注解,但是沒(méi)有說(shuō)完全采用注解實(shí)現(xiàn)。那么這篇文章就和大家分享一下,全部采用注解來(lái)實(shí)現(xiàn)IOC + DI
    2023-01-01
  • java實(shí)現(xiàn)外賣訂餐系統(tǒng)

    java實(shí)現(xiàn)外賣訂餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)外賣訂餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Java中的Random和ThreadLocalRandom詳細(xì)解析

    Java中的Random和ThreadLocalRandom詳細(xì)解析

    這篇文章主要介紹了Java中的Random和ThreadLocalRandom詳細(xì)解析,Random 類用于生成偽隨機(jī)數(shù)的流, 該類使用48位種子,其使用線性同余公式進(jìn)行修改,需要的朋友可以參考下
    2024-01-01

最新評(píng)論