分享
 
 
 

SWT/JFace开发入门指南(十)

王朝java/jsp·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

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

代码段 15

这段代码其实应该还是很好读懂的。带参的构造函数带进来一个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方法将按钮添加到窗口中,这就是全部了。是不是很简单呢?程序运行出来的效果如下图:

图 16

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有