很多时候我们可以通过鼠标点击按钮或者键盘按键实现相同的特定功能。例如,假设有一个ColorChangeAction动作监听器,它的actionPerformed方法可以将背景色改变成某种颜色,将这个监听器添加到三个事件源上:标记为ColorChange的菜单项、标记为ColorChange的工具栏按钮和按键组合CTRL+R,这样,无论用户是点击按钮、菜单选项还是按键组合都能够实现改变背景色。Java Swing包提供了非常实用的Action接口实现将一个动作监听器连接到多个事件源。
Action接口包含多种方法:void putValue(String key, Object value)、void actionPerformed(ActionEvent event)等(详见:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh),该接口扩展于ActionListener接口,因此,可以在任何需要ActionListener对象的地方使用Action对象。需要注意的是,Action是一个接口,实现该接口的所有类都必须实现Action接口中所有的方法。庆幸的是,AbstractAction类实现了Action接口除actionPerformed方法之外的所有方法。因此,我们可以直接扩展AbstractAction类,并在扩展类中实现actionPerformed方法。
下面我们就以AbstractAction类实现将一个动作监听连接到按钮和按键,当点击按钮或按下键盘按键CTRL+Y、CTRL+B、CTRL+R来改变面板颜