用监听器去处理按钮上的动作。下面都采用了匿名内部类来实现代码。
给出同一个例子的三段代码
1.常规的一个按钮设置一个监听器,注册一个按钮
2.只定义一个内部监听器(定义了一个新的类),注册给四个按钮,用getSource()检测动作的来源
3.在框架内实现监听器,注册给四个按钮。

个人推荐第二种。第一种看起来太冗余,第三种没有监听器的类,代码不利于阅读和维护。

第一个

package eventDriven;
import javax.swing.*;
import java.awt.event.*;public class AnonymousListenerDemo extends JFrame{public AnonymousListenerDemo() {JButton jbtNew =new JButton("New");JButton jbtOpen =new JButton("Open");JButton jbtSave =new JButton("Save");JButton jbtPrint =new JButton("Print");JPanel panel=new JPanel();panel.add(jbtNew);panel.add(jbtOpen);panel.add(jbtSave);panel.add(jbtPrint);add(panel);jbtNew.addActionListener( new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Process New");}}  );jbtOpen.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Process Open");}});jbtSave.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Process Save");}});jbtPrint.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Process Print");}});}public static void main(String[] args) {JFrame frame=new AnonymousListenerDemo();frame.setTitle("AnonyMouseListenerDemo");frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();                 //依据组件大小自动调整框架frame.setVisible(true);}
}

第二个

package eventDriven;
import javax.swing.*;
import java.awt.event.*;public class DatectSourceDemo extends JFrame {private JButton jbtNew =new JButton("New");private JButton jbtOpen =new JButton("Open");private JButton jbtSave =new JButton("Save");private JButton jbtPrint =new JButton("Print");public  DatectSourceDemo() {JPanel panel=new JPanel();panel.add(jbtNew);panel.add(jbtOpen);panel.add(jbtSave);panel.add(jbtPrint);add(panel);ButtonListener listener=new ButtonListener();jbtNew.addActionListener(listener);jbtOpen.addActionListener(listener);jbtSave.addActionListener(listener);jbtPrint.addActionListener(listener);}class ButtonListener implements ActionListener {public void actionPerformed(ActionEvent e) {if(e.getSource()==jbtNew)System.out.println("Process New");else if(e.getSource()==jbtOpen){System.out.println("Process Open");}else if(e.getSource()==jbtSave) {System.out.println("Process Save");}else {System.out.println("Process Print");}}}public static void main(String[] args) {JFrame frame=new AnonymousListenerDemo();frame.setTitle("AnonyMouseListenerDemo");frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();                 //依据组件大小自动调整框架frame.setVisible(true);}
}

第三种

package eventDriven;
import javax.swing.*;
import java.awt.event.*;public class FrameAsListenerDemo extends JFrame implements ActionListener{        //在框架里把ActionListener实现了private JButton jbtNew =new JButton("New");private JButton jbtOpen =new JButton("Open");private JButton jbtSave =new JButton("Save");private JButton jbtPrint =new JButton("Print");public FrameAsListenerDemo() {JPanel panel=new JPanel();panel.add(jbtNew);panel.add(jbtOpen);panel.add(jbtSave);panel.add(jbtPrint);add(panel);jbtNew.addActionListener(this);jbtOpen.addActionListener(this);jbtSave.addActionListener(this);jbtPrint.addActionListener(this);}public void actionPerformed(ActionEvent e) {if(e.getSource()==jbtNew)System.out.println("Process New");else if(e.getSource()==jbtOpen){System.out.println("Process Open");}else if(e.getSource()==jbtSave) {System.out.println("Process Save");}else {System.out.println("Process Print");}}public static void main(String[] args) {JFrame frame=new AnonymousListenerDemo();frame.setTitle("AnonyMouseListenerDemo");frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();                 //依据组件大小自动调整框架frame.setVisible(true);}
}

定义监听器的三种方法相关推荐

  1. c++语言定义排序函数,关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必 ...

  2. C语言中比较大小的函数模板,关于C++中定义比较函数的三种方法

    关于C++中定义比较函数的三种方法 C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之.以下,小编为大家介绍关于C++中定义比较函数的三种方法,供 ...

  3. Javascript定义类(class)的三种方法

    将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...

  4. html按钮disabled状态,CSS定义input disabled样式的三种方法

    表单提交的时候我们经常会让提交按钮禁用,满足条件后按钮恢复,disabled禁用按钮后怎么用CSS来改变禁用disabled按钮的样式呢?下面看青岛星网:CSS定义input disabled样式的三 ...

  5. c语言数组最大可定义多少位_C语言求数组的最大值三种方法

    /* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...

  6. java的actionlistener_Java swing: 实现ActionListener监听器的三种途径

    Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的 强大工具.Java Swing组件自动产生各种事件来响应用户行为.如当用户点击按钮或选择菜单项目时,Swing ...

  7. Framework事件机制—Android事件处理的三种方法

    1.1.背景 Android的事件处理的三种方法: 1.基于监听的事件处理机制 setOnClickListener,setOnLongClickListener.setOnTouchListener ...

  8. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  9. vue项目刷新当前页面的三种方法

    本文介绍了vue项目刷新当前页面的三种方法,本文图文并茂给大家介绍的非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下. 想必大家在刨坑vue的时候也遇到过下面情形:比如在删除或者增加一条记录的时 ...

最新文章

  1. excel用vlookup查询的值存在两个相同数值的时候,如何都显示出来?
  2. java中判断Object对象类型
  3. 人工智能之语音识别技术(三)
  4. 工作中最常用的Excel函数公式大全
  5. Agrona的Threadsafe堆外缓冲区
  6. 禅道备份功能_更新禅道燃尽图及数据备份
  7. linux安装jdk(二)
  8. php网站鼠标美化,几款耐用的鼠标指针皮肤,简约清新
  9. 没有对手的人生是孤单的
  10. Apple Store教育优惠(161103)
  11. 安装office2010失败,提示因为安装了office2010早期试用版本或在安装过程中出错
  12. VBA-使用inputbox方法
  13. 界面·财联社完成C轮融资,转型新型金融信息服务商
  14. 《黃帝內經》第一章《上古天真論》
  15. windowsmobile软件_经验:CSPJ/S初赛知识点整理(NOIP硬件与软件基础)
  16. 如何下载PLSQL Developer历史版本?
  17. 四种常见的 POST 提交数据方式 专题
  18. win10+node@16 安装特定版本 node-sass
  19. 高性能本地缓存Ristretto(一)——存储策略
  20. 神经网络中的sigmoid函数

热门文章

  1. 量子计算入门01-量子计算_夏培肃
  2. 通过GET_TAX_PERCENTAGE 函数获取税率
  3. 运营级低延时网络直播平台建设解决方案
  4. 初识C语言:小白学习C语言的第一周记录
  5. 电信增值短信,彩信平台软件2013年,我司平台软件提供,售后1年期技术维护,客户名单
  6. 树莓派(Raspberry Pi),如何在命令行下配置查看WIFI无线网络
  7. js控制浏览器全屏显示
  8. STM32_温湿度传感器
  9. 近期风靡互联网的Deep Dream人工智能图像识别软件
  10. Windows下redis的启动