The Spark of Thinking

Focus on Eclipse Tools.

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  3 随笔 :: 27 文章 :: 4 评论 :: 0 Trackbacks

JFace中的事件模式

大家好,因为工作的事情搞了一个多月,现在终于暂时安定下来了。这一系列的文章我也会继续往下写。

在这一节中,我会向大家介绍 JFace 中的事件模式。其实我相信这篇文章的读者应该大部分都会接触 eclipse ,这样可能也会接触过 eclipse 的插件开发。就是没有接触过,大家也可能会有在 eclipse 里面新建工程的时候出于各种原因(比如好奇心)点了 plug-in project 的时候吧。其实作为一个程序员来讲,保持好奇是很重要的。如果你大概看过一个 plug-in project 的结构,虽然可能不能全部理解,但是我相信也应该对 Action 之类有一些了解。我们这一节主要就是围绕 Action 来写的。为了增加可读性,我们首先介绍几个名词,这些名词都可以从 eclipse 的文档中找到。

什么是 Action

JFace 中的一个 Action 可以简单地理解成一个命令。那么它和事件有什么关系呢?比如说我点了一个菜单,那么点击本身就是一个事件,但是这个事件的影响就是相应的命令被执行了。大家日常使用的一些软件比如 Office 都是有菜单和工具栏的,而一个菜单项和一个工具栏可能执行的是同一个命令。比如 Word 里面要新建一个文档的话可以通过 文件 菜单下的 新建 实现,也可以通过点击工具栏上相应的图标实现。这个新建地功能本身在 JFace 里面是可以使用 Action 来实现的。

JFace 里面, Action 可以关联到菜单,工具条,以及按钮(也就是 Button )。当然关于如何关联,我们会在后面向大家详细介绍。

Action JFace 里面的定义是一个接口 org.eclipse.jface.action.IAction 。当然实际上你写程序的时候必须自己来实现这个接口,写出自己的 Action 类来。

IAction 里面最重要的方法是 run() ,它也是事件触发以后执行的代码。其他的方法都是一些辅助性的方法,不是我们要关注的重点。为了能够将精力集中在我们所关注的事情上,通常我们不是实现 IAction 接口,而是通过继承 org.eclipse.jface.action.Action 这个抽象类来实现 Action 。下面我们通过一个例子来说明 Action 的用法。

Hello,Action!

首先我们先不管用户界面,先定义一个最简单的 Action 类。

 1 public class HelloAction extends Action{
 2     private Shell shell;
 3     
 4     public HelloAction(Shell shell) {    
 5         super("&Hello",Action.AS_PUSH_BUTTON);
 6         this.shell=shell;
 7     }
 8 
 9 
10     @Override
11     public void run() {
12         MessageDialog.openInformation(shell, "Hello""Hello,Action!");
13     }
14     
15 }
16 


代码段
1 5

这段代码其实应该还是很好读懂的。带参的构造函数带进来一个 Shell 实例,而 run() 方法说明了这个 Action 的功能就是显示一个对话框。第 5 行中的代码调用了父类的构造函数,其中第一个参数是 Action 对应的文本,前面的 & 符号表明了 H 是热键,而第二个参数则是一个风格参数。如果大家继续向后看的话,就会发现这个 Action 被附加在了一个按钮上面,而按钮上显示的文本就是 Hello ,如果你定义的风格不是 AS_PUSH_BUTTON 而是 AS_RADIO_BUTTON 的话就会发现按钮已经不是一个纯粹的按钮了,而是一个单选钮。相应的其他风格可以参照 Javadoc。

 1 
 2 public class HelloJface extends ApplicationWindow {      
 3     public HelloJface(Shell shell) {
 4         super(shell);
 5     }
 6       @Override
 7     protected Control createContents(Composite parent) {
 8           HelloAction action=new HelloAction(parent.getShell());
 9           ActionContributionItem aci=new ActionContributionItem(action);
10           aci.fill(parent);
11           return parent;
12    }  
13    /**
14     * @param args
15     */
16    public static void main(String[] args) {
17 
18        HelloJface demo = new HelloJface(null);
19        demo.setBlockOnOpen(true);
20        demo.open();
21        Display.getCurrent().dispose();
22 
23    }
24 }


代码段
16

和前面一节的代码相比,我们只是修改了 createContents 方法。首先创建了一个 HelloAction 的实例,然后又创建了一个 ActionContributionItem 的实例,最后调用了这个实例的 fill 方法将按钮添加到窗口中,这就是全部了。是不是很简单呢?程序运行出来的效果如下图:



1 6

可能看了这个例子,你会认为 ActionContributionItem 这个类表示的就是一个按钮了。但是实际上并不是的,它在图形界面上表示成什么样子,随着不同的 fill 调用又有不同。在下一节中,我会向大家深入介绍 Contribution Item 以及 JFace 中的菜单,工具条等的应用。这一节就到这里结束了,因为刚刚换了工作环境,有很多事情需要去做,所以写得比较短,请大家见谅:)。

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=505209

posted on 2006-07-20 18:13 The Spark of Thinking 阅读(216) 评论(0)  编辑  收藏 所属分类: SWT/JFace

只有注册用户登录后才能发表评论。


网站导航: