java事件大全_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

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");

}

}

上述实例备有较为详尽的注释,应该不难理解。希望本文所述实例对大家能够有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值