/**
  * 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);
   }
  }

最新文章

  1. 基础知识javascript--事件
  2. PHP入门part4
  3. JavaScript之毒瘤
  4. UVALive 5061 Lightning Energy Report --LCA
  5. ngCordova插件安装使用
  6. postgresql之ctid的浅谈
  7. @responseBody注解的使用
  8. Ext 4.2 RowEditing
  9. Linux C 程序 字符串运算符-表达式(TWO)
  10. BZOJ 2599: [IOI2011]Race( 点分治 )
  11. dev控件chart简单实现多图例,双曲线,双柱图,曲线与柱图
  12. [Codeforces 235B]Let's Play Osu!
  13. Basic Git commands
  14. C语言之linux内核实现最大公约数算法
  15. JAVA版本8u171与8u172的区别
  16. BZOJ4589 Hard Nim FWT 快速幂 博弈
  17. Web版记账本开发记录(七)
  18. 29:ISBN号码
  19. DevOps自动化工具集合
  20. 软工个人博客-week7

热门文章

  1. 数据库Tsql语句创建--约束--插入数据
  2. Hello World基于.net framework中CLR的执行
  3. Java中将String转json对象
  4. Could not create connection to database server. Attempted reconnect 3 times. Giving up.错误
  5. Unity 给FindGameObjectsWithTag排序
  6. CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
  7. ArcGIS api for javascript——图形-增加图形到地图
  8. Linux异常关机后,Mysql启动出错ERROR 2002 (HY000)
  9. openGl超级宝典学习笔记 (2) 7个主要的几何图元
  10. cocoapods的安装,使用,卸载,以及你可能会遇到的坑..