Action接口的使用

《》我们常常会遇到这样一个问题:很多组件都需要处理相同的事件 ; 比如,通常一个软件在设计时会因用户习惯,

产生不同的操作方式却能达到相同的功能,例如文书编辑器中,copy功能可能在菜单中出现,

也可能在工具栏上出现,甚至在快显菜单(Popup Menu)中出现,虽然出现的方式不一样,

但均能达到copy的功能.若以我们之前的事件处理方法,我们必须为每种出现方式实现copy功能,

造成程序代码重复性太高,不易阅读也不美观。现在我们就有这样一个处理方法——使用Action接口

《》Action从表面的意思上就是“动作、行为” , 也就说一个实现Action接口的对象,本身就是一种业务,就是一种

处理功能,我们可以使用这个业务对象来创建不同的组件(如普通按钮、菜单项、工具栏按钮等),这样的话这些组件

就都有相同的功能了

《》下面就来详细的介绍Action接口的用法

1、Action接口是ActionListener接口的子接口,它除了包含ActionListener接口的actionPerformed()方法之外,

还含有name和icon两个属性,其中name用于指定创建的按钮或者菜单项的文本标签,icon则用于指定按钮的图标或者

菜单项中的图标。也就是说,Action接口将“事件监听”和“可被转换成按钮和菜单项”集于一身,这恰好说明了上面所说的

功能

2、实际上在JButton的构造方法 public JButton(Action action )中、JToolBar的add(Action action) 、以及JMenu的

add(Action action )方法中都可以看出,他们都能够使用Action对象为参数,将Action自动的转化为按钮或者菜单项,你要做的

仅仅是定义一个Action对象,之后仅仅需要调用上面的方法就能够自动的将Action转化成组件了

3、就像上面说的那样,Action本身并不是组件,只有应用JButton的构造方法或者将Action添加到指定的组件容器中(JToolBar或者JMenu)

才能够将值转化成组件

4、总结上面的各项我们可以得出,接收Action的容器(或者JButton)需要完成以下几项工作:

①使用add方法添加Action对象

②根据Action对象中的name和icon属性,自动的创建按钮或者菜单项

③通过Action对象为应用组件注册事件监听器,系统会为该Action所创建的所有的组件注册同一个事件监听器

(事件处理器就是Action对象里的actionPerformed()方法)

④在Action接口中还有一个setEnabled(boolean)方法,这个方法用来指定当前的Action动作是否被激活,

只有一个Action动作被激活后,相应的组件才能够使用③中的监听器来处理业务,这是为什么呢?比如:我们创建了

“复制”“粘贴”两项Action业务的话,那么只有当复制完成后,“粘贴”业务才可以被激活,否则“粘贴”业务默认

应该是不被激活的

《》好了,基本的逻辑搞清楚之后,那么下面就是如何创建一个Action对象了,一般我们并不是直接通过创建一个

实现Action接口的类,之后在通过这个类来创建Action类型的对象,而是创建一个实现AbstractAction抽象类的类;

这个抽象类AbstractAction实现了Action接口,而且这个抽象类,除了actionPerformed()方法之外,

已经将Action中包括setEnabled(boolean)在内的所有方法都实现了,这样一来我们就能够直接使用setEnabled()

等游泳的方法了;好了这样一来AbstractAction抽象类中只有actionPerformed()方法没有实现,这个方法应该在

创建的那个实现了AbstractAction类的类中实现;所以创建一个Action对象的过程如下:

①创建一个类(设为b类),让这个类继承AbstractAction抽象类

②创建b类的构造方法,为AbstractAction中的name和icon属性赋值

(AbstractAction抽象类中有构造方法 public AbstractAction(String name,Icon icon)

③在b类中实现actionPerformed()方法,在些业务处理时,要注意是要将某些其他的业务激活或者关闭

《》这样一来一切就都非常的清楚了,具体的实例可以参见《疯狂Java讲义》P454

 

你可能感兴趣的:(初学java)