最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java深入學(xué)習(xí)圖形用戶界面GUI之事件處理

 更新時(shí)間:2022年05月07日 10:48:44   作者:遇安.112  
這篇文章主要介紹了基于Java GUI 事件處理方式,一個(gè)圖形界面制作完成了,在程序開(kāi)發(fā)中只是完成了起步的工作。要想讓一個(gè)組件都發(fā)揮自己的作用.就必須對(duì)所有的組件進(jìn)行事件處理

Swing組件中的事件處理專門用于響應(yīng)用戶的操作,例如,響應(yīng)用戶的鼠標(biāo)單擊、按下鍵盤等操作。在Swing事件處理的過(guò)程中,主要涉及三類對(duì)象:

1、事件源:事件發(fā)生的場(chǎng)所,通常是產(chǎn)生事件的組件,如窗口、按鈕、菜單等。

2、事件對(duì)象:封裝了GUI組件上發(fā)生的特定事件(通常就是用戶的一次操作)。

3、監(jiān)聽(tīng)器:負(fù)責(zé)監(jiān)聽(tīng)事件源上發(fā)生的事件,并對(duì)各種事件做出相應(yīng)處理(監(jiān)聽(tīng)器對(duì)象中包含事件處理器)。

實(shí)現(xiàn)Swing事件處理的主要步驟如下:

1、創(chuàng)建事件源:除了一些常見(jiàn)的按鈕、鍵盤等組件可以作為事件源外,還可以使用JFrame窗口在內(nèi)的頂級(jí)容器作為事件源。

2、自定義事件監(jiān)聽(tīng)器:根據(jù)要監(jiān)聽(tīng)的事件源創(chuàng)建指定類型的監(jiān)聽(tīng)器進(jìn)行事件處理。監(jiān)聽(tīng)器是一個(gè)特殊的java類,必須實(shí)現(xiàn)XxxListener接口。根據(jù)組件觸發(fā)的動(dòng)作進(jìn)行區(qū)分,例如,WindowListener用于監(jiān)聽(tīng)窗口事件,ActionListener用于監(jiān)聽(tīng)動(dòng)作事件。

3、為事件源注冊(cè)監(jiān)聽(tīng)器:使用addXxxListener()方法為指定事件源添加特定類型的監(jiān)聽(tīng)器。當(dāng)事件源上發(fā)生監(jiān)聽(tīng)事件后,就會(huì)觸發(fā)綁定的事件監(jiān)聽(tīng)器,由監(jiān)聽(tīng)器中的方法對(duì)事件進(jìn)行相應(yīng)處理。

Swing常用事件處理有:窗體事件、鼠標(biāo)事件、鍵盤事件、動(dòng)作事件等。本文主要針對(duì)鼠標(biāo)事件實(shí)現(xiàn)一個(gè)登錄、退出的窗體操作。

鼠標(biāo)事件:

在圖形用戶界面中,用戶會(huì)經(jīng)常使用鼠標(biāo)進(jìn)行選擇、切換界面等操作,這些操作被定義為鼠標(biāo)事件,包括鼠標(biāo)按下、鼠標(biāo)松開(kāi)、鼠標(biāo)單擊等。java提供了一個(gè)MouseEvent類描述鼠標(biāo)事件。處理鼠標(biāo)事件時(shí),首先需要通過(guò)實(shí)現(xiàn)MouseListener接口定義監(jiān)聽(tīng)器(也可以通過(guò)繼承適配器MouseAdapter類定義監(jiān)聽(tīng)器),然后調(diào)用addMouseListener()方法將監(jiān)聽(tīng)器綁定到事件源對(duì)象。

鼠標(biāo)事件案例一:通過(guò)實(shí)現(xiàn)MouseListener接口定義監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)登錄、退出操作

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class GUI_3事件處理 {
    public static void main(String[] args) {
        guitext1 gt=new guitext1();
    }
}
//創(chuàng)建一個(gè)鼠標(biāo)監(jiān)聽(tīng)類實(shí)現(xiàn)監(jiān)聽(tīng)接口
class guitext1 implements MouseListener {
        JFrame jf;
        JPanel jp;
        JLabel l1,l2;
        JTextField f1,f2;
        JButton jb1,jb2;
        public guitext1() {
            jf = new JFrame("登錄窗口");
            jf.setBounds(300, 200, 350, 300);
            jp = new JPanel();
            Font font = new Font("仿宋", Font.BOLD, 20);
            l1 = new JLabel("用戶名:");
            l1.setFont(font);
            f1 = new JTextField("請(qǐng)輸入用戶名!",20);
            f1.setFont(font);
            l2 = new JLabel("密  碼:");
            l2.setFont(font);
            f2 = new JTextField("請(qǐng)輸入密碼!",20);
            f2.setFont(font);
            jb1 = new JButton("登錄");
            jb1.setFont(font);
            jb1.addMouseListener(this);//登錄按鈕注冊(cè)監(jiān)聽(tīng)器
            jb2 = new JButton("退出");
            jb2.setFont(font);
            jb2.addMouseListener(this);//退出按鈕注冊(cè)監(jiān)聽(tīng)器
            jp.add(l1);
            jp.add(f1);
            jp.add(l2);
            jp.add(f2);
            jp.add(jb1);
            jp.add(jb2);
            jf.add(jp);
            jf.setVisible(true);
        }
        //這些方法可以不寫,但是必須要?jiǎng)?chuàng)建
        @Override
        public void mousePressed(MouseEvent e) {
        }
        @Override
        public void mouseReleased(MouseEvent e) {
        }
        @Override
        public void mouseEntered(MouseEvent e) {
        }
        @Override
        public void mouseExited(MouseEvent e) {
        }
        //鼠標(biāo)點(diǎn)擊事件
        //mouseClicked==>在組件上單擊(按下并釋放)鼠標(biāo)按鈕時(shí)調(diào)用。
        @Override
        public void mouseClicked(MouseEvent e) {
            //getSource()==>得到事件源
            if(e.getSource().equals(jb1)) {
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    //showMessageDialog==>提供一個(gè)名為“消息”的信息消息對(duì)話框。
                    JOptionPane.showMessageDialog(null, "登錄成功!");
                }else{
                    JOptionPane.showMessageDialog(null, "登錄失敗,請(qǐng)重新輸入!");
                    //將文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }//getSource()==>得到事件源
            if(e.getSource().equals(jb2)) {
                JOptionPane.showMessageDialog(null, "退出成功!");
                //關(guān)閉當(dāng)前窗口
                //jf.dispose();
                //系統(tǒng)退出
                System.exit(0);
            }
        }
    }

案例二:通過(guò)繼承適配器MouseAdapter類定義監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)登錄、退出操作

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GUI_3事件處理2 {
        public static void main(String[] args) {
            guitext2 gt=new guitext2();
        }
    }
    class guitext2{
        JFrame jf;
        JPanel jp;
        JLabel l1,l2;
        JTextField f1,f2;
        JButton jb1,jb2;
        public guitext2() {
            jf = new JFrame("登錄窗口");
            jf.setBounds(300, 200, 350, 300);
            jp = new JPanel();
            Font font = new Font("仿宋", Font.BOLD, 20);
            l1 = new JLabel("用戶名:");
            l1.setFont(font);
            //輸入用戶名,JTextField==>允許編輯單行文本,顯示原始字符
            f1 = new JTextField(null,20);
            f1.setFont(font);
            l2 = new JLabel("密  碼:");
            l2.setFont(font);
            //f2 = new JTextField("請(qǐng)輸入密碼!",20);
            //JPasswordField是一個(gè)輕量級(jí)組件,允許編輯單行文本,其中視圖指示輸入的內(nèi)容,但不顯示原始字符。
            f2=new JPasswordField(null,20);
            f2.setFont(font);
            jb1 = new JButton("登錄");
            jb1.setFont(font);
            //為按鈕添加(注冊(cè))自定義鼠標(biāo)監(jiān)聽(tīng)事件監(jiān)聽(tīng)器,并將f1,f2傳入
            guitext2_1 gt=new guitext2_1(f1,f2);
            jb1.addMouseListener(gt);
            jb2 = new JButton("退出");
            jb2.setFont(font);
            jb2.addMouseListener(gt);
           // jb2.addMouseListener(new guitext2_1());//另一種寫法
            jp.add(l1);
            jp.add(f1);
            jp.add(l2);
            jp.add(f2);
            jp.add(jb1);
            jp.add(jb2);
            jf.add(jp);
            jf.setVisible(true);
        }
    }
    //自定義一個(gè)鼠標(biāo)監(jiān)聽(tīng)類
//MouseAdapter==>用于接收鼠標(biāo)事件的抽象適配器類
    class guitext2_1 extends MouseAdapter {
        //將f1,f2傳入
        JTextField f1,f2;
        public guitext2_1(JTextField f1, JTextField f2) {
            this.f1 = f1;
            this.f2 = f2;
        }
        //mouseClicked==>在組件上單擊(按下并釋放)鼠標(biāo)按鈕時(shí)調(diào)用。
        public void mouseClicked(MouseEvent e) {
            //getSource()==>得到事件源
            JButton jButton=(JButton)e.getSource();
            if(jButton.getText().equals("登錄")){
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登錄成功!");
                }else{
                    //showMessageDialog==>提供一個(gè)名為“消息”的信息消息對(duì)話框。
                    JOptionPane.showMessageDialog(null, "登錄失??!");
                    //將文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }
            if(jButton.getText().equals("退出")){
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系統(tǒng)退出
                System.exit(0);
            }
        }
    }

案例三:內(nèi)部類

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GUI_3事件處理2 {
    public static void main(String[] args) {
        guitext2 gt=new guitext2();
    }
}
class guitext2{
    JFrame jf;
    JPanel jp;
    JLabel l1,l2;
    JTextField f1,f2;
    JButton jb1,jb2;
    public guitext2() {
        jf = new JFrame("登錄窗口");
        jf.setBounds(300, 200, 350, 300);
        jp = new JPanel();
        Font font = new Font("仿宋", Font.BOLD, 20);
        l1 = new JLabel("用戶名:");
        l1.setFont(font);
        //輸入用戶名,JTextField==>允許編輯單行文本,顯示原始字符
        f1 = new JTextField(null,20);
        f1.setFont(font);
        l2 = new JLabel("密  碼:");
        l2.setFont(font);
        //f2 = new JTextField("請(qǐng)輸入密碼!",20);
        //JPasswordField是一個(gè)輕量級(jí)組件,允許編輯單行文本,其中視圖指示輸入的內(nèi)容,但不顯示原始字符。
        f2=new JPasswordField(null,20);
        f2.setFont(font);
        jb1 = new JButton("登錄");
        jb1.setFont(font);
        //為按鈕添加(注冊(cè))自定義鼠標(biāo)監(jiān)聽(tīng)事件監(jiān)聽(tīng)器
        guitext2_1 gt=new guitext2_1();
        jb1.addMouseListener(gt);
        jb2 = new JButton("退出");
        jb2.setFont(font);
        jb2.addMouseListener(gt);
        jb2.addMouseListener(new guitext2_1());//另一種寫法
        jp.add(l1);
        jp.add(f1);
        jp.add(l2);
        jp.add(f2);
        jp.add(jb1);
        jp.add(jb2);
        jf.add(jp);
        jf.setVisible(true);
    }
 //內(nèi)部類
//MouseAdapter==>用于接收鼠標(biāo)事件的抽象適配器類
    class guitext2_1 extends MouseAdapter {
        //mouseClicked==>在組件上單擊(按下并釋放)鼠標(biāo)按鈕時(shí)調(diào)用。
        public void mouseClicked(MouseEvent e) {
            //getSource()==>得到事件源
            JButton jButton=(JButton)e.getSource();
            if(jButton.getText().equals("登錄")){
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登錄成功!");
                }else{
                    //showMessageDialog==>提供一個(gè)名為“消息”的信息消息對(duì)話框。
                    JOptionPane.showMessageDialog(null, "登錄失?。?);
                    //將文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }
            if(jButton.getText().equals("退出")){
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系統(tǒng)退出
                System.exit(0);
            }
        }
    }
}

案例四:匿名內(nèi)部類

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GUI_3事件處理3 {
    public static void main(String[] args) {
        guitext3 gt=new guitext3();
    }
}
class guitext3{
    JFrame jf;
    JPanel jp;
    JLabel l1,l2;
    JTextField f1,f2;
    JButton jb1,jb2;
    public guitext3() {
        jf = new JFrame("登錄窗口");
        jf.setBounds(300, 200, 350, 300);
        jp = new JPanel();
        Font font = new Font("仿宋", Font.BOLD, 20);
        l1 = new JLabel("用戶名:");
        l1.setFont(font);
        //輸入用戶名,JTextField==>允許編輯單行文本,顯示原始字符
        f1 = new JTextField(null,20);
        f1.setFont(font);
        l2 = new JLabel("密  碼:");
        l2.setFont(font);
        //f2 = new JTextField("請(qǐng)輸入密碼!",20);
        //JPasswordField是一個(gè)輕量級(jí)組件,允許編輯單行文本,其中視圖指示輸入的內(nèi)容,但不顯示原始字符。
        f2=new JPasswordField(null,20);
        f2.setFont(font);
        jb1 = new JButton("登錄");
        //匿名內(nèi)部類
        jb1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登錄成功!");
                }else{
                    //showMessageDialog==>提供一個(gè)名為“消息”的信息消息對(duì)話框。
                    JOptionPane.showMessageDialog(null, "登錄失敗!");
                    //將文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }
        });
        jb1.setFont(font);
        jb2 = new JButton("退出");
        //匿名內(nèi)部類
        jb2.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系統(tǒng)退出
                System.exit(0);
            }
        });
        jb2.setFont(font);
        jp.add(l1);
        jp.add(f1);
        jp.add(l2);
        jp.add(f2);
        jp.add(jb1);
        jp.add(jb2);
        jf.add(jp);
        jf.setVisible(true);
    }
}

其實(shí)這些是由復(fù)雜的代碼逐漸簡(jiǎn)化的過(guò)程。

我突然發(fā)現(xiàn)其中的JPanel還沒(méi)有給大家解讀過(guò),所以在這里插入一下這個(gè)小知識(shí):

JPanel面板組件是一個(gè)無(wú)邊框且不能被移動(dòng)、放大、縮小或者關(guān)閉的面板,它的默認(rèn)布局管理器是FlowLayout。也可以使用JPanel帶參數(shù)的構(gòu)造函數(shù)JPanel(LayoutManager layout)或者setLayout()成員方法設(shè)置JPanel布局管理器。JPanel也被稱為中間容器。

到此這篇關(guān)于Java深入學(xué)習(xí)圖形用戶界面GUI之事件處理的文章就介紹到這了,更多相關(guān)Java事件處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中實(shí)現(xiàn)登錄攔截器的代碼實(shí)例

    SpringBoot中實(shí)現(xiàn)登錄攔截器的代碼實(shí)例

    這篇文章主要介紹了SpringBoot中實(shí)現(xiàn)登錄攔截器的代碼實(shí)例,對(duì)于管理系統(tǒng)或其他需要用戶登錄的系統(tǒng),登錄驗(yàn)證都是必不可少的環(huán)節(jié),在SpringBoot開(kāi)發(fā)的項(xiàng)目中,通過(guò)實(shí)現(xiàn)攔截器來(lái)實(shí)現(xiàn)用戶登錄攔截并驗(yàn)證,需要的朋友可以參考下
    2023-10-10
  • Springboot jar主清單屬性丟失解決方案

    Springboot jar主清單屬性丟失解決方案

    這篇文章主要介紹了Springboot jar主清單屬性丟失解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java通過(guò)exchange協(xié)議發(fā)送郵件

    Java通過(guò)exchange協(xié)議發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Java通過(guò)exchange協(xié)議發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java多線程并發(fā)之線程池任務(wù)請(qǐng)求攔截測(cè)試實(shí)例

    Java多線程并發(fā)之線程池任務(wù)請(qǐng)求攔截測(cè)試實(shí)例

    這篇文章主要介紹了Java多線程并發(fā)之線程池任務(wù)請(qǐng)求攔截測(cè)試實(shí)例,隊(duì)列中永遠(yuǎn)沒(méi)有線程被加入,即使線程池已滿,也不會(huì)導(dǎo)致被加入排隊(duì)隊(duì)列,實(shí)現(xiàn)了只有線程池存在空閑線程的時(shí)候才會(huì)接受新任務(wù)的需求,需要的朋友可以參考下
    2023-12-12
  • Java OpenCV圖像處理之背景消除

    Java OpenCV圖像處理之背景消除

    GMM(高斯混合模型)是基于像素樣本統(tǒng)計(jì)信息的背景表示方法,利用像素在較長(zhǎng)時(shí)間內(nèi)大量樣本值的概率密度等統(tǒng)計(jì)信息表示別境,然后使用統(tǒng)計(jì)差分進(jìn)行目標(biāo)像素判斷達(dá)到預(yù)期效果。本文將利用GMM方法實(shí)現(xiàn)圖像背景消除,需要的可以參考一下
    2022-02-02
  • java編程Reference核心原理示例源碼分析

    java編程Reference核心原理示例源碼分析

    這篇文章主要為大家介紹了java編程Reference的核心原理以及示例源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-01-01
  • 解決try-catch捕獲異常信息后Spring事務(wù)失效的問(wèn)題

    解決try-catch捕獲異常信息后Spring事務(wù)失效的問(wèn)題

    這篇文章主要介紹了解決try-catch捕獲異常信息后Spring事務(wù)失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Maven基礎(chǔ):錯(cuò)誤對(duì)應(yīng):was cached in the local repository的解決

    Maven基礎(chǔ):錯(cuò)誤對(duì)應(yīng):was cached in the local&nbs

    這篇文章主要介紹了Maven基礎(chǔ):錯(cuò)誤對(duì)應(yīng):was cached in the local repository的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 詳解Spring Boot集成MyBatis(注解方式)

    詳解Spring Boot集成MyBatis(注解方式)

    本篇文章主要介紹了詳解Spring Boot集成MyBatis(注解方式),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Mybatis示例之SelectKey的應(yīng)用

    Mybatis示例之SelectKey的應(yīng)用

    今天小編就為大家分享一篇關(guān)于Mybatis示例之SelectKey的應(yīng)用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論

峡江县| 孝昌县| 望都县| 弥勒县| 府谷县| 徐水县| 涞水县| 鲜城| 鸡泽县| 桃园县| 台湾省| 博乐市| 邯郸县| 高雄县| 彭山县| 剑河县| 团风县| 文登市| 吉水县| 长子县| 大渡口区| 金沙县| 五莲县| 岢岚县| 健康| 信宜市| 陆丰市| 安泽县| 大足县| 永济市| 临沭县| 玛纳斯县| 郑州市| 稷山县| 玉山县| 万全县| 扶沟县| 武川县| 信阳市| 乌兰浩特市| 镇赉县|