/**
  * 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. c# 对用户密码加密解密

    一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 ? 1 2 3 4 5 6 7 8 9 10 11 12 /// <summary> /// 16位MD5加密 ...

  2. 51Nod 天堂里的游戏

    多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. Noder躺在草地上漫无目的的张望,二楼的咖啡馆在日光下闪着亮,像是要进化成一颗巨大的咖啡豆.天气稍有些冷,但草还算暖和.不远的地方坐着一 ...

  3. ipad mini2 升级9.0.2后解锁白屏解决

    解锁白屏是个什么现象?就是当你用手指滑动解锁后出现输入密码的界面后,1秒之内屏幕变白,中间一个黑色的苹果,几秒之后重新回到滑动解锁的界面.我出现这个现象不是因为升级了9.0.2,而是升级了9.0.2之 ...

  4. objc_clear_deallocating 与弱引用

    void *objc_destructInstance(id obj){ if (obj) { Class isa_gen = _object_getClass(obj); class_t *isa ...

  5. 负载均衡集群总结(Haproxy)

    环境:Centos 6.9,Mysql 8.0 首先要先配置mysql主从复制集,可以参考我的上一篇>>Mysql 主从复制总结(详细) 我的主节点在(master):192.168.11 ...

  6. python etree.HTML

    1.编码问题(编码参数 parser): resp_html = etree.HTML(res,parser=etree.HTMLParser(encoding='gbk')) 2.大小写问题(大写转 ...

  7. linu基础入门(一)

    原创作品,允许转载,转载时请务必声明作者信息和本声明. https://www.cnblogs.com/zhu520/p/10730550.html 本人小白,有错指出.谢谢! 一:根据上一步安装与新 ...

  8. Linux下FTPserver的实现(仿vsftpd)

    继上一篇博文实现Linux下的shell后,我们进一步利用网络编程和系统编程的知识实现Linux下的FTPserver.我们以vsftpd为原型并实现了其大部分的功能.因为篇幅和时间的关系,这里不再一 ...

  9. 遇到 Form 性能问题怎么办 performance issue

    性能问题是比較复杂的问题. 一般由performance team 负责, 可是常见的情况是, 我们 INV team 定义的 view 不好, 导致查询性能较差. 这个必须由产品组和 perform ...

  10. linux设备驱动归纳总结(三):4.ioctl的实现

    linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简单介绍: 尽管在文件操作结构体"struct file_operations"中有非常多相应的设备操作函数 ...