本文实例汇总了java中常见的事件响应方法,包括容器类监听、监听器类、AbstractAction、反射等。以方便大家参考。具体方法如下:
首先,在Java图形用户界面中,处理事件时所必须的步骤是:
1、创建接受响应的组件(控件)
2、实现相关事件监听接口
3、注册事件源的动作监听器
4、事件触发时的事件处理
相应的可以通过以下的集中方式来作出事件响应。
一、容器类监听
效果:单击窗体中的三个按钮,实现相应的相应时间。
import java.awt.*; import java.awt.event.*; import javax.swing.*; //声明 类时,添加“implements ActionListener”实现监听的接口,如果要对多种监听方式进行监听,则用逗号间隔开 // 比如“implements ActionListener,KeyListener” class ButtonListener extends JFrame implements ActionListener{ JButton ok, cancel,exit; //创建接受响应的组建,就是三个按钮 public ButtonListener(String title){ super(title); this.setLayout(new FlowLayout()); ok = new JButton(\"确定\"); cancel = new JButton(\"返回\"); exit = new JButton(\"退出\"); //下面三个语句 为按钮分别 注册监听器 ok.addActionListener(this); cancel.addActionListener(this); exit.addActionListener(this); getContentPane().add(ok); getContentPane().add(cancel); getContentPane().add(exit); } //完成 事件触发时的事件处理 public void actionPerformed(ActionEvent e){ if(e.getSource()==ok) System.out.println(\"确定\"); if(e.getSource()==cancel) System.out.println(\"返回\"); if(e.getSource()==exit) System.exit(0);; } public static void main(String args[]) { ButtonListener pd=new ButtonListener(\"ActionEvent Demo\"); pd.setSize(250,100); pd.setVisible(true); } }
二、监听类实现
效果:单击窗体中的三个按钮,实现相应的相应时间。
import java.awt.*; import java.awt.event.*; import javax.swing.*; class ButtonListener1 extends JFrame { //这里没有实现监听 JButton ok, cancel,exit; public ButtonListener1(String title){ super(title); this.setLayout(new FlowLayout()); ok = new JButton(\"确定\"); cancel = new JButton(\"返回\"); exit = new JButton(\"退出\"); ok.addActionListener(new MyListener()); cancel.addActionListener(new MyListener());; exit.addActionListener(new MyListener());; getContentPane().add(ok); getContentPane().add(cancel); getContentPane().add(exit); } public static void main(String args[]) { ButtonListener pd=new ButtonListener(\"ActionEvent Demo\"); pd.setSize(250,100); pd.setVisible(true); } } //监听动作事件 class MyListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==\"确定\") System.out.println(\"确定\"); if(e.getActionCommand()==\"返回\") System.out.println(\"返回\"); if(e.getActionCommand()==\"退出\") System.exit(0);; } }
三、使用 AbstractAction类实现监听
效果:单击菜单,作出响应
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; //此类继承AbstractAction,必须实现actionPerformed()方法。 class AbstractEvent extends AbstractAction{ //private static final long serialVersionUID = 1L; AbstractEvent(){ } public void actionPerformed(ActionEvent e){ //弹出确认对话框 if (e.getActionCommand()==\"open\"){ JOptionPane.showMessageDialog(null, \"打开\"); }else if (e.getActionCommand()==\"close\"){ JOptionPane.showMessageDialog(null, \"关闭\"); }else if (e.getActionCommand()==\"run\"){ JOptionPane.showMessageDialog(null, \"运行\"); }else if (e.getActionCommand()==\"stop\"){ JOptionPane.showMessageDialog(null, \"停止\"); } } } public class TestAbstractEvent { private static JMenuBar menubar; private static JFrame frame; //指定MenuEvent的具体处理程序是AbstractEvent类完成的。 final Action MenuEvent=new AbstractEvent(); public TestAbstractEvent(){ frame=new JFrame(\"menu\"); frame.getContentPane().setLayout(new BorderLayout()); menubar=new JMenuBar(); JMenu menuFile=new JMenu(\"file\"); //实例化一个菜单项,并添加监听openAction, JMenuItem menuItemopen=new JMenuItem(\"open\"); menuItemopen.addActionListener(MenuEvent); JMenuItem menuItemclose=new JMenuItem(\"close\"); menuItemclose.addActionListener(MenuEvent); menuFile.add(menuItemopen); menuFile.add(menuItemclose); JMenu menuTool=new JMenu(\"tool\"); JMenuItem menuItemrun=new JMenuItem(\"run\"); menuItemrun.addActionListener(MenuEvent); JMenuItem menuItemstop=new JMenuItem(\"stop\"); menuItemstop.addActionListener(MenuEvent); menuTool.add(menuItemrun); menuTool.add(menuItemstop); menubar.add(menuFile); menubar.add(menuTool); menubar.setVisible(true); frame.add(menubar,BorderLayout.NORTH); frame.setSize(400,200); frame.setVisible(true); } public static void main(String[] args){ new TestAbstractEvent(); } }
四、 AbstractAction类 + 反射 的方法
效果:单击工具栏的三个按钮,通过按钮的名称,反射得到 与按钮名称相同的类实现响应。
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import javax.swing.*; class ViewAction extends AbstractAction{ private String ActionName=\"\"; //private JFrame frame=null; private Action action=null; public ViewAction(){ } public ViewAction(String ActionName){ this.ActionName=ActionName; //this.frame=frame; } @Override public void actionPerformed(ActionEvent e) { Action action=getAction(this.ActionName); action.execute(); } private Action getAction(String ActionName){ try{ if (this.action==null){ Action action=(Action)Class.forName(ActionName).newInstance(); this.action=action; } return this.action; }catch(Exception e){ return null; } } } public class TestAE extends JFrame { public JToolBar bar=new JToolBar(); String buttonName[]={\"b1\",\"b2\",\"b3\"}; public TestAE(){ super(\"事件\"); for (int i=0;i<buttonName.length;i++){ ViewAction action=new ViewAction(buttonName[i]); JButton button=new JButton(buttonName[i]); button.addActionListener(action); bar.add(button); } this.getContentPane().add(bar,BorderLayout.NORTH); this.setSize(300, 200); this.setLocationRelativeTo(null); this.setVisible(true); } public static void main(String [] args){ new TestAE(); } } interface Action{ void execute(); } class b1 implements Action{ public void execute(){ JOptionPane.showMessageDialog(null, \"单击了 b1\"); } } class b2 implements Action{ public void execute(){ JOptionPane.showMessageDialog(null, \"单击了 b2\"); } } class b3 implements Action{ public void execute(){ JOptionPane.showMessageDialog(null, \"单击了 b3\"); } }
上述实例备有较为详尽的注释,应该不难理解。希望本文所述实例对大家能够有所帮助。
本文地址:https://www.stayed.cn/item/20635
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我