我的JAVA窝! - BlogJava

SWT/JFace开发入门指南(十)〈转帖〉

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 中的菜单,工具条等的应用。这一节就到这里结束了,因为刚刚换了工作环境,有很多事情需要去做,所以写得比较短,请大家见谅:)。

posted @ 2006-12-18 00:25 J2S 阅读(255) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(九)〈转帖〉

     摘要: JFace 的 Hello,world ! 我们仍然是从一个最简单的 Hello,world! 开始介绍 JFace 。为了更形象一些,首先把程序列...  阅读全文

posted @ 2006-12-18 00:24 J2S 阅读(266) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(八)〈转帖〉

JFace 以及其他

关于 JFace :一个简单的介绍

我们已经有了 swt ,我们用 swt 可以写出一个完整的程序来,那么我们为什么需要 Jface 呢?

对于这一点,本文作者(就是我了,嘿嘿)的理解是:使用 JFace 比只是单纯地使用 swt 编程更加简单,或者说:代码量更少。毕竟,你完全可以用汇编写一个用户界面,但是付出的代价似乎大了一点 :P

如果你在使用 swt 编程,那么 JFace 的知识并是必需的:你完全可以不用 JFace 就可以写出任何你需要的功能。但是如果你使用 JFace ,你必需对 swt 有一些了解,因为 JFace 需要 swt 的各种部件构建用户界面。

我觉得我们可以在某种程度上这样看 JFace :它封装了一部分 swt 的功能,所谓“封装”可以从几个方面来看:

首先,你可以使用 JFace 的某些机制来代替 swt 中的一些机制

其次, JFace 中各种功能的实现都是依赖于底层的 swt 的。

最后,你可以在使用 JFace 时候同时使用 swt

这篇文章的组织结构

在这篇文章以后的部分,我将会向大家介绍以下的内容:

首先,我会从一个简单的示例程序开始展示如何开始写一个 JFace 程序

之后我会向大家介绍 JFace 的事件模型(与 swt 的事件模型不同)

然后我会向大家介绍与构建 JFace 用户界面相关的一些知识。

目前来讲,因为我刚刚写到这里,这是我所能想到的一些部分,当然,可能在以后的文章中略有不同。

另外的参考资料

在这一系列文章的第一节( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx )中,我向大家介绍了一些参考资料。现在向大家再介绍一篇在 IBM developerworks 上发现的一篇很好的文章:

eclipse Workbench 之外使用 eclipse GUI ,这篇文章共有三部分,地址列在下面:

http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui1/index.html

http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui2/index.html

http://www-128.ibm.com/developerworks/cn/linux/opensource/os-ecgui3/index.html

环境的配置

关于如何配置编程环境,可以参照这一系列文章的第一篇( http://blog.csdn.net/jayliu/archive/2005/04/29/367757.aspx ),在这里我不再赘述。

posted @ 2006-12-18 00:23 J2S 阅读(155) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(七)〈转帖〉

     摘要: 几种特殊的部件 好像因为大家的抱怨比较多,感觉这一段 csdn 的 blog 似乎又有恢复稳定的迹象了, ^_^ 。 ...  阅读全文

posted @ 2006-12-18 00:22 J2S 阅读(232) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(六)〈转帖〉

使用 Layout 管理 UI 布局

我们在前面在一些例子中已经使用过 Layout 了。那么 Layout 到底是做什么的呢?

我们知道,在设计用户界面时候,我们可以采用的一种办法是手动的为每个部件设置合适当大小和位置。但是这样的话,如果你所要显示的部件比较多,编程量就会非常大,特别是考虑到窗体大小变化时候各种部件的重绘。而实际上,我们可以利用一些通用的规则或者说算法来安排这些部件的排列。比如下图所示的这个窗体:

10

很显然,对于这些规则化的部件排列,应该有一些更简单的办法,而不是在代码的各个部分写 xxx.setBounds 之类。 swt 给我们提供了这样的办法,就是使用 Layout

你可以把一个 Layout 看成是安排部件位置和大小的一个规则,在应用了 Layout Composite (我们在这里第一次提到了 Composite Composite 就是一个能够包含其他控件的容器,比如 Shell 就是一个 Composite ,我们会在后面的部分详细介绍 Composite )中,所有的子控件都会按照这个规则来进行排列。

在目前(写这篇文章的时候 eclipse 最新版本是 3.1M7 ), org.eclipse.swt.layout 包中包含四种已经定义好的 Layout ,它们分别是: FillLayout FormLayou GridLayout RowLayout 。我在这里不再一一作介绍,而是推荐大家看一下这篇文章《 Understanding Layouts in SWT 》。相信如果你有兴趣看完它的话,就会对 Layout 有比较深的了解。

posted @ 2006-12-18 00:22 J2S 阅读(159) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(五)〈转帖〉

使用 Visual Editor 加速你的开发

eclipse 中,你可以使用 Visual Editor 来进行拖放式的图形界面设计。实际上我觉得在这一方面大家应该可以很容易上手。

如果你安装了 VE 的话,在新建一个 swt 工程的时候你就可以省好多力气了:你不需要找那些名字 n 长的 jar ,然后一个一个导入工程的 build path 里面,而是仅仅需要添加一个 User Library ,就像下面图示一样:

7

你可以新建一个 Visual Class

图8

之后就可以使用 VE 进行可视化的编辑了:

9

关于 VE 的具体应用,我在这里不作具体介绍(说实话,我觉得用起来还是比较简单的),如果你觉得实在有必要看一篇详细的指南的话,可以参照这篇文章: Extending The Visual Editor
Tutorial: Enabling support for a custom widget


posted @ 2006-12-18 00:21 J2S 阅读(134) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(四)〈转帖〉

     摘要: 让你的 swt 程序动起来 在向使用者提供最差的用户体验方面,中国的 IT 企业始终走在时代的最前端。之所以有这样的感慨其实是来源于往 blog 上贴...  阅读全文

posted @ 2006-12-18 00:21 J2S 阅读(151) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(一)〈转帖〉

     摘要: 写在前面的话 终于决定提起笔来写一篇关于 swt 和 JFace 编程的文章。在开始之前,我想先介绍一下你能够从将要出现的这一系列文章里得到什么,以及更重要的,你不能得到什么。我们的时间是如此之重要,以至于我们很难容忍...  阅读全文

posted @ 2006-12-18 00:19 J2S 阅读(117) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(三)〈转帖〉

     摘要: 初步体验 widget   ...  阅读全文

posted @ 2006-12-08 19:30 J2S 阅读(240) | 评论 (0)编辑 收藏

SWT/JFace开发入门指南(二)〈转帖〉

     摘要: 从 Hello, world! 开始了解 Display 和 Shell 在这一节中,我们从前面所列举出来的...  阅读全文

posted @ 2006-12-08 18:13 J2S 阅读(261) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 下一页 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(2)

随笔档案

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜