/**
  * Simple1.java - 处理事件的第一种方法
  * 在这个例子中,利用一个ActionListener来监听事件源产生的事件
  * 用一些if语句来决定是哪个事件源
  */
  
  
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  
  public class Simple1
  {
   private static JFrame frame; // 定义为静态变量以便main使用
   private static JPanel myPanel; // 该面板用来放置按钮组件
   private JButton button1; // 这里定义按钮组件
   private JButton button2; // 以便让ActionListener使用
  
    public Simple1() // 构造器, 建立图形界面
   {
   // 新建面板
   myPanel = new JPanel();
    // 新建按钮
   button1 = new JButton("按钮1"); // 新建按钮1
   button2 = new JButton("按钮2");
  
   SimpleListener ourListener = new SimpleListener();
   // 建立一个actionlistener让两个按钮共享
   button1.addActionListener(ourListener);
   button2.addActionListener(ourListener);
  
   myPanel.add(button1); // 添加按钮到面板
   myPanel.add(button2);
   }
  
    private class SimpleListener implements ActionListener
    {
   /**
   * 利用该内部类来监听所有事件源产生的事件
    * 便于处理事件代码模块化
    */
    public void actionPerformed(ActionEvent e)
    {
   // 利用getActionCommand获得按钮名称
   // 也可以利用getSource()来实现
   // if (e.getSource() ==button1)
  
   String buttonName = e.getActionCommand();
   if (buttonName.equals("按钮1"))
   JOptionPane.showMessageDialog(frame,
   "按钮1 被点击");
   else if (buttonName.equals("按钮2"))
   JOptionPane.showMessageDialog(frame,
   "按钮2 被点击");
   else
   JOptionPane.showMessageDialog(frame,
   "Unknown event" );
   }
   }
  
   public static void main(String s[])
   {
   Simple1 gui = new Simple1(); // 新建Simple1组件
  
   frame = new JFrame("Simple1"); // 新建JFrame
   // 处理关闭事件的通常方法
   frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e)
   {System.exit(0);} });
  
   frame.getContentPane().add(myPanel);
   frame.pack();
   frame.setVisible(true);
   }
  }
  

 
 
/**
  * Simple2.java - 处理事件的第二种方法
  * 在这个例子中,利用匿名内部类来监听每一个事件源产生的事件
  * 避免使用一些if语句来决定是哪个事件源
  */
  
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  
  public class Simple2
  {
       private static JFrame frame; // 定义为静态变量以便main使用
       private static JPanel myPanel; // 该面板用来放置按钮组件
       private JButton button1; // 这里定义按钮组件 
       private JButton button2; // 以便让ActionListener使用
       
       public Simple2() // 构造器, 建立图形界面
       {
           // 新建面板
           myPanel = new JPanel();
           // 新建按钮
           button1 = new JButton("按钮1"); // 新建按钮1
           button2 = new JButton("按钮2");
          
           // 每一个事件源需要一个监听器
           // 定义一个匿名内部类来监听事件源产生的事件
           button1.addActionListener(
               new ActionListener()
               {
                   public void actionPerformed(ActionEvent e)
                   {
                       JOptionPane.showMessageDialog(frame,"按钮1 被点击");
                   }
               }
           );
          
           button2.addActionListener(
               new ActionListener()
               {
                   public void actionPerformed(ActionEvent e)
                   {
                       JOptionPane.showMessageDialog(frame,"按钮2 被点击");
                   }
               }
           );
          
           myPanel.add(button1); // 添加按钮到面板
           myPanel.add(button2);
        }
          
        public static void main(String s[])
        {
            Simple2 gui = new Simple2(); // 新建Simple2组件
                               
            frame = new JFrame("Simple2"); // 新建JFrame
            // 处理关闭事件的通常方法
            frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e)
            {System.exit(0);} });
            frame.getContentPane().add(myPanel);
            frame.pack(); 
            frame.setVisible(true);
        }
  }

/**
  * Simple3.java - 处理事件的第三种方法
  * For this example, we will use inner member classes to
  * 在这个例子中,利用一般内部类来监听每个事件源产生的事件
  * 该方法避免了第二种方法中由于使用匿名内部类而导致的代码混乱
  * 便于集中处理事件代码
  * 每一个Hander可以被工具栏或菜单多次使用
  */
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  
  public class Simple3
  {
   private static JFrame frame; // 定义为静态变量以便main使用
   private static JPanel myPanel; // 该面板用来放置按钮组件
   private JButton button1; // 这里定义按钮组件
   private JButton button2; // 以便让ActionListener使用
  
   // 利用一般内部类来监听每一个事件源产生的事件如(button1, button2)
   private class Button1Handler implements ActionListener
   {
   public void actionPerformed(ActionEvent e)
   {
   JOptionPane.showMessageDialog(frame,"按钮1 被点击");
   }
   }
  
   private class Button2Handler implements ActionListener
   {
   public void actionPerformed(ActionEvent e)
   {
   JOptionPane.showMessageDialog(frame,"按钮2 被点击");
   }
   }
  
   public Simple3() // // 构造器, 建立图形界面
   {
   // 新建面板
   myPanel = new JPanel();
   // 新建按钮
   button1 = new JButton("按钮1"); // 新建按钮1
   button2 = new JButton("按钮2");
  
   // 对每一个组件注册监听内部类
   button1.addActionListener(new Button1Handler());
   button2.addActionListener(new Button2Handler());
  
   myPanel.add(button1); // 添加按钮到面板
   myPanel.add(button2);
   }
  
   public static void main(String s[])
   {
   Simple3 gui = new Simple3(); // 新建Simple3组件
  
   frame = new JFrame("Simple3"); // 新建JFrame
   // 处理关闭事件的通常方法
   frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e)
   {System.exit(0);} });
  
   frame.getContentPane().add(myPanel);
   frame.pack();
   frame.setVisible(true);
   }
  }

ActionListener三种实现的更多相关文章

  1. ActionListener的三种实现方法

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

  2. Java swing: 实现ActionListener监听器的三种途径

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

  3. 简谈百度坐标反转至WGS84的三种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...

  4. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  5. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  6. css中的浮动与三种清除浮动的方法

    说到浮动之前,先说一下CSS中margin属性的两种特殊现象 1, 外边距的合并现象: 如果两个div上下排序,给上面一个div设置margin-bottom,给下面一个div设置margin-top ...

  7. ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

    由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...

  8. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...

  9. .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源

    物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...

随机推荐

  1. GoldenGate 日常监控

    正确启动数据库 源端启动数据库 SQL>  startup 源端启动goldengate GGSCI >  start mgr GGSCI >  start * 目标端启动数据库 S ...

  2. highGUI图形用户界面

    #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> using namespace ...

  3. python 自动广播机制 (broadcasting)

    一定要注意,执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,而不是矩阵乘法的运算,矩阵乘法运算时需要维度之间严格匹配.(且矩阵 ...

  4. 【转载】Perl中字符串编码的处理

    在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...

  5. Python解析Socket数据流异常bytes问题

    Python解析Socket数据流异常bytes问题 -- 2019-03-12 python在通过socket发送数据时,英文字符转义后为原来本身的字符,占一个字节(如:s转移后为s),而中文字符在 ...

  6. WHU 1552 Seats 枚举

    题意: 有一个年级中7个班的n个学生. 一天,他们毫无顺序的站成一排.请计算最小的交换次数,使得 相同班的同学都站在一起. (只有站在一起的人才能交换) 思路: 如果知道班级的最终排列就能在很短的时间 ...

  7. WebKit载入流程 - 概述

    之前写了几篇载入流程的说明,是从下向上看,有点仅仅见树木不见森林的感觉.经过近期一段时间的学习,有了能加以概括抽象的方法. WebKit载入流程和页面组成是直接相关的,页面就是WebKit要载入的对象 ...

  8. PHP开发环境&amp;MySQL下载安装及配置流程

    PHP开发环境&MySQL下载安装及配置流程 因工作须要,从0開始学PHP,前几天看完视频教程后開始搞开发环境,到今天才好.这里把安装配置流程梳理一下分享出来. 一.概述 要搭建一个开发环境无 ...

  9. Linux LVM(逻辑卷管理)

    Lvm基本应用 什么是LVM? LVM 的全称是 Logical Volume Manager.中文为逻辑卷管理.它是Linux对磁盘分区的一种管理机制.它在传统的硬盘(或硬盘分区)和文件系统之间建立 ...

  10. linux下u盘检測程序

           获得U盘的插入或者拔取得信息的传统方法是在内核级执行hotplug程序.相关參数通过环境变量传递过来,再由hotplug通知其它关注hotplug的应用程序,可是效率比較低.      ...