事件監聽器

来源:https://www.cnblogs.com/Auci/archive/2022/04/03/16095888.html
-Advertisement-
Play Games

《零基礎學Java》 事件監聽器 為按鈕等添加事件監聽器,事件監聽器的作用是在用戶單擊按鈕時,設置窗體要實現的功能。 動作事件監聽器 動作事件監聽器(AbstractAction)監聽器是Swing中比較常用的事件監聽器,很多最近的動作都會使用它監聽(比如:按鈕被單擊)。 動作事件監聽器 動作事件監 ...


《零基礎學Java》


  • 事件監聽器

    為按鈕等添加事件監聽器,事件監聽器的作用是在用戶單擊按鈕時,設置窗體要實現的功能。

  • 動作事件監聽器

動作事件監聽器(AbstractAction)監聽器是Swing中比較常用的事件監聽器,很多最近的動作都會使用它監聽(比如:按鈕被單擊)。

動作事件監聽器

動作事件監聽器 實例

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class Demo17 extends JFrame {
    public Demo17(){
        setBounds(100,100,300,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        Container c = getContentPane();
        c.setLayout(new FlowLayout());

        JLabel jLabel = new JLabel("標簽");
        c.add(jLabel);

        /**
         * 為 按鈕 添加動作監聽
         */
        JButton jButton = new JButton("按鈕");
        jButton.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jLabel.setText("按鈕被點擊");
            }
        });
        c.add(jButton);

        /**
         * 為 文本框 添加動作監聽
         */
        JTextField jTextField = new JTextField(10);
        c.add(jTextField);
        jTextField.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Object obj = e.getSource();//捕捉這個動作由那個按鍵觸發的
                JTextField jTextField1 = (JTextField)obj;
                System.out.println(jTextField1.getText());

                jLabel.setText("文本框中點擊了回車");
            }
        });

        /**
         * 為 多選框 添加動作監聽
         */
        JCheckBox jCheckBox = new JCheckBox("多選框");
        c.add(jCheckBox);
        jCheckBox.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jLabel.setText("多選框被點擊");
            }
        });

        /**
         * 為 單選框 添加動作監聽
         */
        JRadioButton jRadioButton = new JRadioButton("單選框");
        c.add(jRadioButton);
        jRadioButton.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jLabel.setText("單選框被點擊");
            }
        });

        /**
         * 為 下拉列表 添加動作監聽
         */
        String string[] = {"選項1","選項2"};
        JComboBox jComboBox = new JComboBox(string);
        c.add(jComboBox);
        jComboBox.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jLabel.setText("下拉列表被選擇");
            }
        });

        setVisible(true);
    }

    public static void main(String[] args) {
        new Demo17();
    }
}

動作事件監聽器 實例輸出結果:

  • 鍵盤事件

    當向文本框中輸入文本內容時,將觸發鍵盤事件。KeyEvent類 負責捕獲鍵盤事件,可以通過為組
    件添加實現了 KeyListener介面 的監聽器類,來處理該組件觸發的鍵盤事件。

    KeyListener介面的三個方法:

    keyListener.addKeyListener(new KeyListener() {
                @Override
                public void keyTyped(KeyEvent e) {
    			//發生擊鍵事件時觸發
                }
    
                @Override
                public void keyPressed(KeyEvent e) {
    			//按鍵被按下時觸發
                }
    
                @Override
                public void keyReleased(KeyEvent e) {
                //按鍵被釋放時觸發
                }
            });
    

    KeyListener類的常用方法:

(PS:在 KeyEvent類 中以 “VK_” 開頭的靜態常量代表各個按鍵的 keyCode,可以通過這些
靜態常量判斷事件中的按鍵,獲得按鍵的標簽。)

鍵盤事件 實例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class LoginAuthentication extends JFrame {

    private JPanel jPanel1;
    private JPanel jPanel2;
    private JTextField account;
    private JPasswordField password;
    private JButton jButton;
    private String zh = "123";
    private String mm = "456";

    public LoginAuthentication() {
        setBounds(100, 100, 320, 230);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("目前狀態:正在登錄中");

        Container c = getContentPane();
        c.setLayout(new FlowLayout());

        jPanel1 = new JPanel(new FlowLayout());
        jPanel1.setBorder(BorderFactory.createTitledBorder("賬號"));
        account = new JTextField(20);
        account.addKeyListener(new KeyListener() {//創建鍵盤事件
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {

            }

            @Override
            public void keyReleased(KeyEvent e) {
                int dl = e.getKeyCode();
                switch (dl) {
                    case KeyEvent.VK_ENTER:
                        password.requestFocus();
                        return;
                }
            }
        });
        jPanel1.add(account);
        c.add(jPanel1);

        jPanel2 = new JPanel(new FlowLayout());
        jPanel2.setBorder(BorderFactory.createTitledBorder("密碼"));
        password = new JPasswordField(20);
        jPanel2.add(password);
        c.add(jPanel2);

        jButton = new JButton("登錄");
        jButton.addActionListener(new AbstractAction() {//創建滑鼠事件
            @Override
            public void actionPerformed(ActionEvent e) {
                if (account.getText().equals(zh)) {
                    char ch[] = password.getPassword();
                    String zhu = new String(ch);
                    if (zhu.equals(mm)) {
                        System.out.println("登錄成功");
                        setTitle("目前狀態:登錄成功");
                    }else{
                        System.out.println("登錄失敗");
                        setTitle("目前狀態:登錄失敗");
                    }
                }else {
                    System.out.println("登錄失敗");
                    setTitle("目前狀態:登錄失敗");
                }
            }
        });
        c.add(jButton);

        setVisible(true);
    }

    public static void main(String[] args) {
        new LoginAuthentication();
    }
}

鍵盤事件 實例輸出結果:

  • 滑鼠事件

    所有組件都能應用滑鼠事件, MouseEvent類 負責捕獲滑鼠事件,可以通過為組件添加實現了
    MouseListener介面的監聽器類來處理該組件觸發的滑鼠事件。MouseListener介面 共有5個抽象方法,分別在游標移入游標移出滑鼠按鍵被按下滑鼠按鍵被釋放滑鼠按鍵被單擊 事件時被觸發。

    MouseListener介面的五個方法:

 clickArea.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                //滑鼠點擊
            }

            @Override
            public void mousePressed(MouseEvent e) {
				//按鍵按下
            }

            @Override
            public void mouseReleased(MouseEvent e) {
				//按鍵釋放
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                //滑鼠進入
            }

            @Override
            public void mouseExited(MouseEvent e) {
         		//滑鼠退出
            }
        });

MouseEvent類的常用方法:

MouseEvent類中代表滑鼠按鍵的靜態常量:

滑鼠事件 實例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Demo19 extends JFrame {
    private JScrollPane jScrollPane;
    private JTextArea out;
    private JPanel promptArea;
    private JPanel clickArea;

    public Demo19(){
        setBounds(100,100,450,400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("滑鼠事件");

        Container c =getContentPane();
        c.setLayout(new GridLayout(1,2));

        promptArea=new JPanel(new FlowLayout());
        promptArea.setBorder(BorderFactory.createTitledBorder("輸出區域"));
        out=new JTextArea("",18,18);
        jScrollPane=new JScrollPane(out);
        promptArea.add(jScrollPane);
        c.add(promptArea);

        clickArea=new JPanel(new FlowLayout());
        clickArea.setBorder(BorderFactory.createTitledBorder("點擊區域"));
        clickArea.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {//滑鼠點擊
                int hitCount = e.getClickCount();//滑鼠點擊次數
                int clickButton = e.getButton();//滑鼠點擊的按鍵
                switch (clickButton){
                    case MouseEvent.BUTTON1:
                        out.append("滑鼠左鍵點擊了"+hitCount+"次組件\n");
                        break;
                    case MouseEvent.BUTTON2:
                        out.append("滑鼠中鍵點擊了"+hitCount+"次組件\n");
                        break;
                    case MouseEvent.BUTTON3:
                        out.append("滑鼠右鍵點擊了"+hitCount+"次組件\n");
                        break;
                }
            }

            @Override
            public void mousePressed(MouseEvent e) {//按鍵按下

            }

            @Override
            public void mouseReleased(MouseEvent e) {//按鍵釋放

            }

            @Override
            public void mouseEntered(MouseEvent e) {//滑鼠進入
                out.append("滑鼠進入組件\n");
            }

            @Override
            public void mouseExited(MouseEvent e) {//滑鼠退出
                out.append("滑鼠退出組件\n");
            }
        });
        c.add(clickArea);




        setVisible(true);
    }

    public static void main(String[] args) {
        new Demo19();
    }
}

滑鼠事件 實例輸出結果:

  • 窗體事件

    WindowListener介面中五個方法:

    public DemoWindw(){
            addWindowListener(new MywindowListener());//創建窗體事件監聽
        }
    
    class MywindowListener implements WindowListener{
    
            @Override
            public void windowOpened(WindowEvent e) { 
              	//窗體打開
            }
    
            @Override
            public void windowClosing(WindowEvent e) {
                //窗體將要關閉
            }
    
            @Override
            public void windowClosed(WindowEvent e) {
                //窗體已經關閉
            }
    
            @Override
            public void windowIconified(WindowEvent e) {
                //窗體最小化
            }
    
            @Override
            public void windowDeiconified(WindowEvent e) {
                //窗體恢復正常大小
            }
    
            @Override
            public void windowActivated(WindowEvent e) {
                //窗體激活
            }
    
            @Override
            public void windowDeactivated(WindowEvent e) {
                //窗體失去激活
            }
        }
    

    窗體事件 實例:

    import javax.swing.*;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    
    public class Demo20 extends JFrame {
        public Demo20(){
            setBounds(100,100,300,300);
            /**
             * EXIT_ON_CLOSE:關閉視窗同時停止程式
             * DISPOSE_ON_CLOSE:關閉視窗時釋放窗體資源
             */
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setVisible(true);
    
            addWindowListener(new MywindowListener());//創建窗體事件監聽
        }
    
        class MywindowListener implements WindowListener{
    
            @Override
            public void windowOpened(WindowEvent e) { //窗體打開
                System.out.println("窗體被打開");
            }
    
            @Override
            public void windowClosing(WindowEvent e) {//窗體將要關閉
                System.out.println("窗體將要被關閉");
            }
    
            @Override
            public void windowClosed(WindowEvent e) {//窗體已經關閉
                /**
                 * 如果使用EXIT_ON_CLOSE(關閉視窗同時停止程式)可能無法觸發此方法
                 */
                System.out.println("窗體已經被關閉");
            }
    
            @Override
            public void windowIconified(WindowEvent e) {//窗體最小化
                System.out.println("窗體最小化");
            }
    
            @Override
            public void windowDeiconified(WindowEvent e) {//窗體恢復正常大小
                System.out.println("窗體恢復正常大小");
            }
    
            @Override
            public void windowActivated(WindowEvent e) {//窗體激活
                System.out.println("窗體被激活");
            }
    
            @Override
            public void windowDeactivated(WindowEvent e) {//窗體失去激活
                System.out.println("窗體失去激活");
            }
        }
    
        public static void main(String[] args) {
            new Demo20();
        }
    }
    

    窗體事件 實例輸出結果:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 可以讀寫基本數據類型的數據 * 數據輸入流:DataInputStream * DataInputStream(InputStream in) * 數據輸出流:DataOutputStream * DataOutputStream(OutputStream out) package cn.itcas ...
  • 最近棧長看到各種 Firefox 瀏覽器禁止中國用戶的消息,簡單說就是 Firefox 中國無法使用去廣告插件。 這到底是怎麼回事呢? 我於是去 Firefox 搜索了去廣告插件: 比如說打開第一個:AdGuard AdBlocker: 還真的不能用了,什麼鬼?? 打開網路面板,看看頁面的響應信息: ...
  • 一、什麼是scrapy? Scrapy,Python開發的一個快速、高層次的屏幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試. 其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 後臺也應用在獲取API所返回的 ...
  • 前面幾篇博客,說了很多dubbo服務提供者相關的流程; 複習一下:首先服務提供者去暴露服務介面數據到註冊中心,然後本地啟動netty服務端監聽是否有消費者的請求,現在我們可以看看消費者端是怎麼從註冊中心獲取指定的介面信息, 然後訪問netty服務端,就行了; 提前須知:要提前瞭解spring的ioc ...
  • 假期玩嗨了吧,我給你準備了六個小游戲,有膽子來玩一玩嗎?我自己是玩了很多遍的,所以想讓大家一起玩,獨樂樂不如眾樂樂。代碼放在下麵。 1、小恐龍 玩法:上下控制起跳躲避 源碼分享: Python學習交流Q群:906715085### import cfg import sys import rando ...
  • 又到每日分享Python小技巧的時候了,我真是太開心了。今天給大家分享的是模擬太陽系行星運轉。聽起來就很不錯,效果出來的時候也是很不錯的,讓我們一起期待。 1、準備材料 首先我們需要準備這樣一些材料 宇宙背景圖 背景透明的行星圖 2:編寫代碼 代碼分塊詳解 導入需要的模塊 ###Python學習交流 ...
  • 最近我看好多人的朋友圈都流行發九宮格照片,別人都能擁有,碼農必須有。當然,我們要比其他人更為高調,我們就用Python來對圖片進行處理,這肯定能秀翻你的朋友圈。廢話不說,開乾。 一、圖片導入與信息查看 在對圖像進行處理之前,我們首先需要載入出來一張圖片,我們以載入文件中存在的圖像為例子,載入圖片並查 ...
  • 繼承 繼承1 繼承的好處2 繼承的細節3 如果父類和子類都有同一個屬性(比如name)那麼查找時遵循以下原則4 this和super區分 1 繼承的好處 代碼的復用性提高了 代碼的擴展性和維護性提高了 2 繼承的細節 子類繼承了所有的屬性和方法,非私有的屬性和方法可以在子類直接訪問,私有的屬性pri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...