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被点击");
        }
        
    }

}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章