Java 图形界面编程 中三种事件处理方法之比较

Java 图形界面编程 中三种事件处理方法之比较

Java Swing编程中,通过注册监听器,我们可以监听事件源产生的事件,从而在事件处理程式中处理我们所需要处理的用户行为。

Java Swing
中处理各元件事件的一般步骤是:

1
新建一个元件(如JButton)。

2
将该组件添加到相应的面板(如JPanel)。

3
注册监听器以监听事件源产生的事件(如通过ActionListener来回应用户点击按钮)。

4
定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。

以上步骤我们可以用多种方法实现。但人们通常用二种方法。第一种方法是只利用一个监听器以及多个if语句来决定是哪个元件产生的事件;第二种方法是使用多个内部类来回应不同元件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。

 

处理事件的第一种方法:利用一个ActionListener来监听事件源产生的事件

 

Button1.addActionListener(new SimpleListener());

private class SimpleListener implements ActionListener
{
/*
*
利用该内部类来监听所有事件源产生的事件

*
便於处理事件代码模组化
*/
public void actionPerformed(ActionEvent e)
{
//
利用getActionCommand获得按钮名称
//
也可以利用getSource()来实现
// if (e.getSource() ==button1)

String buttonName = e.getActionCommand();
if (buttonName.equals("
按钮1"))
JOptionPane.showMessageDialog(frame,
"
按钮1 被点击
");
else if (buttonName.equals("
按钮
2"))
JOptionPane.showMessageDialog(frame,
"
按钮2 被点击
");
else
JOptionPane.showMessageDialog(frame,
"Unknown event" );
}
}

 

 

处理事件的第二种方法: 利用匿名内部类来监听每一个事件源产生的事件

 

button1.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(frame,
"
按钮1 被点击
");
}
}
);

 

 

处理事件的第三种方法: 利用一般内部类来监听每一个事件源产生的事件

button1.addActionListener(new Button1Handler());

private class Button1Handler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(frame,
"
按钮1 被点击
");
}
}

 

利用一个监听器来处理事件的缺点是,当程式比较复杂时,需要一大串的if 语句来实现,程式码较难阅读与维护。当然,如果处理的事件较少,这种方式比较简单。

 

使用匿名内部类同样存在许多另外的问题。首先,根据元件在代码中被定义的不同位置,类的定义以及处理事件的代码将分散在程式的各个部分,不是集中在一块,同样不便於阅读与维护。各事件的处理全部由嵌套的程式块组成,视觉上很难定位程式码。如果事件处理程式比较复杂,内部类中的代码将变得很长,你将找不到相应的组件定义位置。最後,当工具栏、功能表栏目等需要处理同样的用户行为时,该方法将使代码更难维护。

 

使用一般的命名内部类可以解决以上许多问题。所有的事件处理方法都集中在一块,并且都具有有意义的名称,程式非常容易阅读与维护。单个的事件处理程式也可以被工具栏、功能表栏等重复使用,

 

综上说述,当事件少而简单时,建议用第一种方法处理;当有多个事件源时,我们用getSource()getActionCommand() 两个方法判断,一般不建议用匿名内部类,而建议大家用自己定义的实现了事件接口的类!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值