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

Java基礎學習之Swing事件監(jiān)聽

 更新時間:2021年05月26日 08:55:18   作者:一腔詩意醉了酒  
今天學習java的Swing庫,創(chuàng)建桌面應用的時候,突然發(fā)現(xiàn)有些按鈕需要特定的功能響應,故來研究一番Swing的事件監(jiān)聽,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下

一、初始代碼架構

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


public class Btn extends JFrame{
    public static void main(String []args){
        JFrame f = new JFrame("事件監(jiān)聽測試");
        f.setBounds(0,0,300,400);
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                f.setVisible(false);
                f.dispose();
                System.exit(0);
            }
        });
        Container page = f.getContentPane();
        page.setLayout(new FlowLayout());
        JButton btn = new JButton("打印");
        page.add(btn);
        f.setVisible(true);
    }
    

}

運行的結果

在這里插入圖片描述

二、需求分析

想要點擊按鈕的時候在終端打印一行信息(比如"按鈕被點擊")

產(chǎn)品爸爸,提了新需求,不能實現(xiàn)也要創(chuàng)造辦法實現(xiàn)的啦

2.1 寫監(jiān)聽器

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


public class Btn{
    public static void main(String []args){
        JFrame f = new JFrame("事件監(jiān)聽測試");
        f.setBounds(0,0,300,400);
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                f.setVisible(false);
                f.dispose();
                System.exit(0);
            }
        });
        Container page = f.getContentPane();
        page.setLayout(new FlowLayout());
        JButton btn = new JButton("打印");

        /**
         * 事件監(jiān)聽的使用步驟:
         * 1. 創(chuàng)建監(jiān)聽聽
         * 2. 將監(jiān)聽器注冊到按鈕上
         * 
         */
        btnListener bl = new btnListener();
        btn.addActionListener(bl);
        page.add(btn);
        f.setVisible(true);
    }

    
    

}

class btnListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            System.out.println("按鈕被點擊了----");
        }
    }

點擊按鈕的結果

在這里插入圖片描述 

2.2 發(fā)現(xiàn)問題

中規(guī)中矩地實現(xiàn)監(jiān)聽器地話,發(fā)現(xiàn)要另外寫一個類實現(xiàn)ActionListener 接口地方法,使得代碼架構顯得比較臃腫。

2.3 使用匿名內(nèi)部類優(yōu)化代碼

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


public class Btn{
    public static void main(String []args){
        JFrame f = new JFrame("事件監(jiān)聽測試");
        f.setBounds(0,0,300,400);
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                f.setVisible(false);
                f.dispose();
                System.exit(0);
            }
        });
        Container page = f.getContentPane();
        page.setLayout(new FlowLayout());
        JButton btn = new JButton("打印");

        /**
         * 事件監(jiān)聽的使用步驟:
         * 1. 創(chuàng)建監(jiān)聽聽
         * 2. 將監(jiān)聽器注冊到按鈕上
         * 
         */
        ActionListener bl = new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                System.out.println("匿名內(nèi)部類優(yōu)化----");
            }
        };

        btn.addActionListener(bl);
        page.add(btn);
        f.setVisible(true);
    }

    
    

}

class btnListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            System.out.println("按鈕被點擊了----");
        }
    }

在這里插入圖片描述

2.4 優(yōu)化完之后發(fā)現(xiàn)還是不是很優(yōu)雅

因為每次監(jiān)聽都有重復代碼

@Override
 public void actionPerformed(ActionEvent e){
     System.out.println("匿名內(nèi)部類優(yōu)化----");
 } 

2.5 使用Lambda表達式再優(yōu)化

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


public class Btn{
    public static void main(String []args){
        JFrame f = new JFrame("事件監(jiān)聽測試");
        f.setBounds(0,0,300,400);
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                f.setVisible(false);
                f.dispose();
                System.exit(0);
            }
        });
        Container page = f.getContentPane();
        page.setLayout(new FlowLayout());
        JButton btn = new JButton("打印");

        /**
         * 事件監(jiān)聽的使用步驟:
         * 1. 創(chuàng)建監(jiān)聽聽
         * 2. 將監(jiān)聽器注冊到按鈕上
         * 
         */
        // ActionListener bl = new ActionListener(){
        //     @Override
        //     public void actionPerformed(ActionEvent e){
        //         System.out.println("匿名內(nèi)部類優(yōu)化----");
        //     }
        // };

        // btn.addActionListener(bl);
        btn.addActionListener((e)->{
            System.out.println("使用Lambda表達式優(yōu)化");
        });
        page.add(btn);
        f.setVisible(true);
    }

    
    

}

class btnListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            System.out.println("按鈕被點擊了----");
        }
    }

結果

在這里插入圖片描述

2.6 最終的代碼

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Btn{
    public static void main(String []args){
        JFrame f = new JFrame("事件監(jiān)聽測試");
        f.setBounds(0,0,300,400);
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                f.setVisible(false);
                f.dispose();
                System.exit(0);
            }
        });
        Container page = f.getContentPane();
        page.setLayout(new FlowLayout());
        JButton btn = new JButton("打印");
        
        btn.addActionListener((e)->{
            System.out.println("使用Lambda表達式優(yōu)化");
        });
        page.add(btn);
        f.setVisible(true);
    }
}

三、ActionListener接口源碼

/*
 * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

package java.awt.event;

import java.util.EventListener;

/**
 * The listener interface for receiving action events.
 * The class that is interested in processing an action event
 * implements this interface, and the object created with that
 * class is registered with a component, using the component's
 * {@code addActionListener} method. When the action event
 * occurs, that object's {@code actionPerformed} method is
 * invoked.
 *
 * @see ActionEvent
 * @see <a  rel="external nofollow" >How to Write an Action Listener</a>
 *
 * @author Carl Quinn
 * @since 1.1
 */
public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     * @param e the event to be processed
     */
    public void actionPerformed(ActionEvent e);

}

到此這篇關于Java基礎學習之Swing事件監(jiān)聽的文章就介紹到這了,更多相關Swing事件監(jiān)聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Maven清理java項目中未使用到 jar 依賴包的方法

    Maven清理java項目中未使用到 jar 依賴包的方法

    本文主要介紹了Maven清理java項目中未使用到 jar 依賴包的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • spring boot 靜態(tài)資源處理方法

    spring boot 靜態(tài)資源處理方法

    本篇文章主要介紹了spring boot 靜態(tài)資源處理方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java實體類中Set按照對象的某個字段對set排序

    Java實體類中Set按照對象的某個字段對set排序

    這篇文章主要介紹了Java實體類中Set按照對象的某個字段對set排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-06-06
  • 詳解JAVA類加載機制(推薦)

    詳解JAVA類加載機制(推薦)

    這篇文章主要介紹了JAVA類加載機制的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • springboot集成shiro自定義登陸過濾器方法

    springboot集成shiro自定義登陸過濾器方法

    這篇文章主要介紹了springboot集成shiro自定義登陸過濾器方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • java自定義攔截器用法實例

    java自定義攔截器用法實例

    這篇文章主要介紹了java自定義攔截器用法,實例分析了java自定義攔截器的實現(xiàn)與使用技巧,需要的朋友可以參考下
    2015-06-06
  • Java中的synchronized?優(yōu)化方法之鎖膨脹機制

    Java中的synchronized?優(yōu)化方法之鎖膨脹機制

    這篇文章主要介紹了Java中的synchronized?優(yōu)化方法之鎖膨脹機制,鎖膨脹機制是提升?synchronized?性能最有利的方法之一,下面我們就來看看什么事鎖膨脹及鎖膨脹的各種細節(jié)
    2022-05-05
  • java實現(xiàn)手寫一個簡單版的線程池

    java實現(xiàn)手寫一個簡單版的線程池

    有些人可能對線程池比較陌生,并且更不熟悉線程池的工作原理。本文就來手寫一個簡單版的線程池,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring手動生成web.xml配置文件過程詳解

    Spring手動生成web.xml配置文件過程詳解

    這篇文章主要介紹了Spring手動生成web.xml配置文件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • java?stream使用指南之sorted使用及進階方式

    java?stream使用指南之sorted使用及進階方式

    這篇文章主要介紹了java?stream使用指南之sorted使用及進階方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

泗水县| 鄂托克旗| 苍山县| 惠州市| 营口市| 嘉禾县| 文化| 开化县| 赤水市| 夹江县| 荆州市| 金川县| 胶南市| 保亭| 平顺县| 嫩江县| 祁连县| 吴堡县| 灵台县| 堆龙德庆县| 封开县| 涞水县| 深圳市| 云和县| 黔江区| 抚州市| 昆明市| 武邑县| 安龙县| 富川| 保靖县| 溧水县| 石嘴山市| 含山县| 宁陵县| 盐源县| 施甸县| 建昌县| 孝昌县| 辉南县| 灯塔市|