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");
}
}
上述实例备有较为详尽的注释,应该不难理解。希望本文所述实例对大家能够有所帮助。