• ActionListener 监听事件源产生的事件


    用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如ActionEvents,ChangeEvents,ItemEvents等,来响应用户的鼠标点击行为。通过实现ActionListener接口来监听这些事件并作出处理

    1.if语句判断是哪个事件源

    代码示例:

    package actionEvent;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    
    /**
    * 在这个例子中,利用一个ActionListener来监听事件源产生的事件
    * 用一些if语句来决定是哪个事件源
    1. 新建一个组件(如JButton)。
    
    2. 将该组件添加到相应的面板(如JPanel)。
    
    3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
    
    4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
    */
    
    public class ActionDemo
    {
        private static JFrame jframe;
        private static JPanel jpanel;
        private JButton button1;
        private JButton button2;
        
        public static void main(String[] args){
            jframe=new JFrame();
            new ActionDemo();
            jframe.add(jpanel);
            jframe.pack();//根据组件大小自适应窗口大小
            jframe.setVisible(true);//窗口可显示
            
            //点击窗口关闭时退出应用程序
            jframe.addWindowListener(new WindowAdapter(){
                public void windowClosing(){
                    System.exit(0);
                }
            });
            
        }
        
        public ActionDemo(){
            jpanel=new JPanel();//实例化面板
            button1=new JButton("按钮1");//实例化按钮
            button2=new JButton("按钮2");
            SimpleListener sl=new SimpleListener();//实例化监听类
            button1.addActionListener(sl);//添加监听给按钮
            button2.addActionListener(sl);
            jpanel.add(button1);//按钮添加到面板
            jpanel.add(button2);
            
            
        }
        
        private class SimpleListener implements ActionListener{
            //实现此方法,实现窗体上发生点击按钮事件后的处理
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.out.println(e.getSource());
                String butName=e.getActionCommand();
                if(butName.equals("按钮1")){
                    JOptionPane.showMessageDialog(jframe, "按钮1被点击");
                }else if(butName.equals("按钮2")){
                    JOptionPane.showMessageDialog(jframe, "按钮2被点击");
                }else{
                    JOptionPane.showMessageDialog(jframe, "UnKnow event");
                }
            }
            
        }
    
    }
    
    
        

    2.通过匿名内部类的方式注册监听

    代码示例:

    package actionEvent;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    
    /**
     * 在这个例子中,利用一个ActionListener来监听事件源产生的事件 ,用匿名内部类的方式
     * 1. 新建一个组件(如JButton)。
     * 
     * 2. 将该组件添加到相应的面板(如JPanel)。
     * 
     * 3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
     * 
     * 4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
     */
    
    public class ActionDemo {
        private static JFrame jframe;
        private static JPanel jpanel;
        private JButton button1;
        private JButton button2;
    
        public static void main(String[] args) {
            jframe = new JFrame();
            new ActionDemo();
            jframe.add(jpanel);
            jframe.pack();// 根据组件大小自适应窗口大小
            jframe.setVisible(true);// 窗口可显示
    
            // 点击窗口关闭时退出应用程序
            jframe.addWindowListener(new WindowAdapter() {
                public void windowClosing() {
                    System.exit(0);
                }
            });
    
        }
    
        public ActionDemo() {
            jpanel = new JPanel();// 实例化面板
            button1 = new JButton("按钮1");// 实例化按钮
            button2 = new JButton("按钮2");
            button1.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    JOptionPane.showMessageDialog(jframe, "按钮1被点击");
                }
    
            });
            button2.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    JOptionPane.showMessageDialog(jframe, "按钮2被点击");
                }
    
            });
            jpanel.add(button1);// 按钮添加到面板
            jpanel.add(button2);
    
        }
    
    }

    3.给每一个组件创建一个监听器

    代码示例:

    package actionEvent;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    
    /**
     * 在这个例子中,利用一个ActionListener来监听事件源产生的事件 ,给每个组件建立一个监听
     * 1. 新建一个组件(如JButton)。
     * 
     * 2. 将该组件添加到相应的面板(如JPanel)。
     * 
     * 3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
     * 
     * 4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
     */
    
    public class ActionDemo {
        private static JFrame jframe;
        private static JPanel jpanel;
        private JButton button1;
        private JButton button2;
    
        public static void main(String[] args) {
            jframe = new JFrame();
            new ActionDemo();
            jframe.add(jpanel);
            jframe.pack();// 根据组件大小自适应窗口大小
            jframe.setVisible(true);// 窗口可显示
    
            // 点击窗口关闭时退出应用程序
            jframe.addWindowListener(new WindowAdapter() {
                public void windowClosing() {
                    System.exit(0);
                }
            });
    
        }
    
        public ActionDemo() {
            jpanel = new JPanel();// 实例化面板
            button1 = new JButton("按钮1");// 实例化按钮
            button2 = new JButton("按钮2");
            button1.addActionListener(new but1Listener());
            button2.addActionListener(new but2Listener());
            jpanel.add(button1);// 按钮添加到面板
            jpanel.add(button2);
    
        }
        
        private class but1Listener implements ActionListener{
    
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                JOptionPane.showMessageDialog(jframe, "按钮1被点击");
            }
            
        }
        private class but2Listener implements ActionListener{
    
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                JOptionPane.showMessageDialog(jframe, "按钮2被点击");
            }
            
        }
    
    }

    总结:这几种方式各有优缺,但实际差别不大,具体使用哪种根据程序复杂度以及具体场景而定

  • 相关阅读:
    快速排序
    推荐!手把手教你使用Git
    「瞻前顾后」写出我心(九十九)
    「减法」写出我心(九十八)
    「焦虑」写出我心(九十七)
    「认知水平」​​​​​​​​写出我心(九十六)
    「成功的事业」写出我心(九十五)
    「爱」​​​​​​写出我心(九十四)
    「赢」​​​​​写出我心(九十三)
    「体面人」​​​​写出我心(九十二)
  • 原文地址:https://www.cnblogs.com/hebiao/p/9590739.html
Copyright © 2020-2023  润新知