java常见事件响应方法实例汇总
本文实例汇总了java中常见的事件响应方法,包括容器类监听、监听器类、AbstractAction、反射等。以方便大家参考。具体方法如下:
首先,在Java图形用户界面中,处理事件时所必须的步骤是:
1、创建接受响应的组件(控件)
2、实现相关事件监听接口
3、注册事件源的动作监听器
4、事件触发时的事件处理
相应的可以通过以下的集中方式来作出事件响应。
一、容器类监听
效果:单击窗体中的三个按钮,实现相应的相应时间。
importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; //声明类时,添加“implementsActionListener”实现监听的接口,如果要对多种监听方式进行监听,则用逗号间隔开 //比如“implementsActionListener,KeyListener” classButtonListenerextendsJFrameimplementsActionListener{ JButtonok,cancel,exit;//创建接受响应的组建,就是三个按钮 publicButtonListener(Stringtitle){ super(title); this.setLayout(newFlowLayout()); ok=newJButton("确定"); cancel=newJButton("返回"); exit=newJButton("退出"); //下面三个语句为按钮分别注册监听器 ok.addActionListener(this); cancel.addActionListener(this); exit.addActionListener(this); getContentPane().add(ok); getContentPane().add(cancel); getContentPane().add(exit); } //完成事件触发时的事件处理 publicvoidactionPerformed(ActionEvente){ if(e.getSource()==ok) System.out.println("确定"); if(e.getSource()==cancel) System.out.println("返回"); if(e.getSource()==exit) System.exit(0);; } publicstaticvoidmain(Stringargs[]){ ButtonListenerpd=newButtonListener("ActionEventDemo"); pd.setSize(250,100); pd.setVisible(true); } }
二、监听类实现
效果:单击窗体中的三个按钮,实现相应的相应时间。
importjava.awt.*; importjava.awt.event.*; importjavax.swing.*; classButtonListener1extendsJFrame{//这里没有实现监听 JButtonok,cancel,exit; publicButtonListener1(Stringtitle){ super(title); this.setLayout(newFlowLayout()); ok=newJButton("确定"); cancel=newJButton("返回"); exit=newJButton("退出"); ok.addActionListener(newMyListener()); cancel.addActionListener(newMyListener());; exit.addActionListener(newMyListener());; getContentPane().add(ok); getContentPane().add(cancel); getContentPane().add(exit); } publicstaticvoidmain(Stringargs[]){ ButtonListenerpd=newButtonListener("ActionEventDemo"); pd.setSize(250,100); pd.setVisible(true); } } //监听动作事件 classMyListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(e.getActionCommand()=="确定") System.out.println("确定"); if(e.getActionCommand()=="返回") System.out.println("返回"); if(e.getActionCommand()=="退出") System.exit(0);; } }
三、使用AbstractAction类实现监听
效果:单击菜单,作出响应
importjava.awt.BorderLayout; importjava.awt.event.ActionEvent; importjavax.swing.AbstractAction; importjavax.swing.Action; importjavax.swing.JFrame; importjavax.swing.JMenu; importjavax.swing.JMenuBar; importjavax.swing.JMenuItem; importjavax.swing.JOptionPane; //此类继承AbstractAction,必须实现actionPerformed()方法。 classAbstractEventextendsAbstractAction{ //privatestaticfinallongserialVersionUID=1L; AbstractEvent(){ } publicvoidactionPerformed(ActionEvente){ //弹出确认对话框 if(e.getActionCommand()=="open"){ JOptionPane.showMessageDialog(null,"打开"); }elseif(e.getActionCommand()=="close"){ JOptionPane.showMessageDialog(null,"关闭"); }elseif(e.getActionCommand()=="run"){ JOptionPane.showMessageDialog(null,"运行"); }elseif(e.getActionCommand()=="stop"){ JOptionPane.showMessageDialog(null,"停止"); } } } publicclassTestAbstractEvent{ privatestaticJMenuBarmenubar; privatestaticJFrameframe; //指定MenuEvent的具体处理程序是AbstractEvent类完成的。 finalActionMenuEvent=newAbstractEvent(); publicTestAbstractEvent(){ frame=newJFrame("menu"); frame.getContentPane().setLayout(newBorderLayout()); menubar=newJMenuBar(); JMenumenuFile=newJMenu("file"); //实例化一个菜单项,并添加监听openAction, JMenuItemmenuItemopen=newJMenuItem("open"); menuItemopen.addActionListener(MenuEvent); JMenuItemmenuItemclose=newJMenuItem("close"); menuItemclose.addActionListener(MenuEvent); menuFile.add(menuItemopen); menuFile.add(menuItemclose); JMenumenuTool=newJMenu("tool"); JMenuItemmenuItemrun=newJMenuItem("run"); menuItemrun.addActionListener(MenuEvent); JMenuItemmenuItemstop=newJMenuItem("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); } publicstaticvoidmain(String[]args){ newTestAbstractEvent(); } }
四、AbstractAction类+反射的方法
效果:单击工具栏的三个按钮,通过按钮的名称,反射得到与按钮名称相同的类实现响应。
importjava.awt.BorderLayout; importjava.awt.event.ActionEvent; importjavax.swing.*; classViewActionextendsAbstractAction{ privateStringActionName=""; //privateJFrameframe=null; privateActionaction=null; publicViewAction(){ } publicViewAction(StringActionName){ this.ActionName=ActionName; //this.frame=frame; } @Override publicvoidactionPerformed(ActionEvente){ Actionaction=getAction(this.ActionName); action.execute(); } privateActiongetAction(StringActionName){ try{ if(this.action==null){ Actionaction=(Action)Class.forName(ActionName).newInstance(); this.action=action; } returnthis.action; }catch(Exceptione){ returnnull; } } } publicclassTestAEextendsJFrame{ publicJToolBarbar=newJToolBar(); StringbuttonName[]={"b1","b2","b3"}; publicTestAE(){ super("事件"); for(inti=0;i<buttonName.length;i++){ ViewActionaction=newViewAction(buttonName[i]); JButtonbutton=newJButton(buttonName[i]); button.addActionListener(action); bar.add(button); } this.getContentPane().add(bar,BorderLayout.NORTH); this.setSize(300,200); this.setLocationRelativeTo(null); this.setVisible(true); } publicstaticvoidmain(String[]args){ newTestAE(); } } interfaceAction{ voidexecute(); } classb1implementsAction{ publicvoidexecute(){ JOptionPane.showMessageDialog(null,"单击了b1"); } } classb2implementsAction{ publicvoidexecute(){ JOptionPane.showMessageDialog(null,"单击了b2"); } } classb3implementsAction{ publicvoidexecute(){ JOptionPane.showMessageDialog(null,"单击了b3"); } }
上述实例备有较为详尽的注释,应该不难理解。希望本文所述实例对大家能够有所帮助。