java常见事件响应方法实例汇总
程序员文章站
2024-02-29 22:13:28
本文实例汇总了java中常见的事件响应方法,包括容器类监听、监听器类、abstractaction、反射等。以方便大家参考。具体方法如下:
首先,在java图形用户界面中...
本文实例汇总了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"); } }
上述实例备有较为详尽的注释,应该不难理解。希望本文所述实例对大家能够有所帮助。