用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如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被点击"); } } }
总结:这几种方式各有优缺,但实际差别不大,具体使用哪种根据程序复杂度以及具体场景而定