用户在窗体上对组件进行一定动作,比如鼠标点击,会产生一些相应的事件,如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被点击"); } } }
总结:这几种方式各有优缺,但实际差别不大,具体使用哪种根据程序复杂度以及具体场景而定
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
网友评论