王朝网络
分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-31
宽屏版  字体: |||超大  

JFace的Hello,world!我们仍然是从一个最简单的Hello,world!开始介绍JFace。为了更形象一些,首先把程序列出来:

1

2 public class HelloJface extends Window {

3

4 public HelloJface(Shell arg0) {

5 super(arg0);

6 }

7 @Override

8 protected Control createContents(Composite parent) {

9 Text text = new Text(parent, SWT.NONE);

10 text.setText("Hello,world!");

11 return parent;

12

13 }

14 /**

15 * @param args

16 */

17 public static void main(String[] args) {

18

19 HelloJface demo = new HelloJface(null);

20 demo.setBlockOnOpen(true);

21 demo.open();

22 Display.getCurrent().dispose();

23

24 }

25 }

26

代码段12

首先我们从这段代码来看一下使用JFace和单纯地使用swt写程序有什么不一样:

在swt程序中,我们需要自己创建Display,自己创建Shell,但是在这里,我们只需要:

创建一个继承自Window(org.eclipse.jface.window.Window)的类

在这个类的createContents方法中为窗口添加部件

将这个对象的blockOnOpen属性设定为true,这个属性的含义就和它的名字一样,窗口会一直保持打开的状态(接收各种事件)直到被关闭。

调用这个对象的open方法即打开了窗口

由于设定了blockOnOpen,窗口会保持接受各种事件,知道用户(或者程序)关闭了它。

在关闭以后,程序继续向下运行,我们需要将资源释放掉,所以有了这样一句话:

Display.getCurrent().dispose();

其中Display.getCurrent()得到了程序的display对象,并进而调用dispost()方法释放了各种资源。

其实这也是我们写一个JFace程序一般的步骤,当然我们可能还会添加事件处理之类,但是大体上都是这样的。

因为这个程序运行的结果其实和我们以前swt的Hello,world!是一样的,所以在这里我也不再贴图了。大家可以自己运行看一下。

Window,ApplicationWindow,Dialog关于Window的Q&A

JFace中的Window就是一个窗口。我们知道在swt中窗口是用Shell表示的,而JFace中的Window其实也可以看作是对于Shell的一种封装。

在org.eclipse.jface.window.Window中,有几个方法需要我们注意,为了更加突出各自的功能,我把这些介绍写成Q&A的形式:

Q:如何为窗体添加各种功能部件?

A:方法就是重载createContents方法,这个方法中我们可以给窗体中创建一些子部件,比如Text,Lable,Composite之类,在前面的demo中我们是只创建了一个文本框。

Q:如何定义窗体的风格?

A:可以通过调用setShellStyle方法来设定窗体的风格,比如如果我们在前面程序的main函数中添加这样一句话(在demo.open();之前):

demo.setShellStyle(SWT.DIALOG_TRIM);

那么出现的就是一个对话框风格的窗体。

Q:如何定义窗体的Layout,标题等属性

A:可以通过重载configureShell方法实现,比如下面这样一段程序:

@Override

protected void configureShell(Shell shell) {

shell.setText("JFace Window");

shell.setLayout(new RowLayout(SWT.VERTICAL));

}

就设定了窗口标题为“JFace Window”,Layout也设定为RowLayout。

默认窗体的Layout为GridLayout。

这个简短的Q&A就到这里为止。对于Window的介绍也到这里告一段落,下面我们简单地看一下Window的两个子类:ApplicationWindow(org.eclipse.jface.window.ApplicationWindow)和Dialog(org.eclipse.jface.dialogs.Dialog)

ApplicationWindowApplicationWindow除了具有Window的特性以外,还允许我们方面地添加菜单,工具条(Toolbar或者Coolbar),状态条之类的。关于这方面的特性我会在后面的文章中做单独介绍,这里就不再赘述了。

对话框JFace中的Dialog是一个抽象类,所以你必须使用它的子类或者自己写一个它的子类。当然了,实际上你根本没有必要去自己继承。

离题万里:swt中的MessageBox关于对话框,首先我要给大家介绍的却是一个swt中的MessageBox(org.eclipse.swt.widgets.MessageBox)。实际上,如果你看过这个系列文章中介绍swt事件模式的内容的话,可能早就注意到我在里面使用过MessageBox了。

Swt中的MessageBox允许我们通过指定风格来改变对话框的外观,比如如果对话框的风格中包含SWT.OK,它就会有一个确定按钮;如果包含SWT.CANCEL,就会有一个取消按钮,如果包含ICON_QUESTION那么弹出的对话框就有一个问号图标,等等吧。

比如我们看下面这段程序:

MessageBox dialog=new MessageBox(shell,SWT.OK|SWT.ICON_INFORMATION);

dialog.setText("Hello");

dialog.setMessage("Hello,world!");

dialog.open();

代码段 13

这里我们从构造函数的style参数可以看出,这是一个带有信息图标(一个感叹号)和一个确定按钮的对话框。具体图示见下面:

图 14

对比:JFace中的MessageDialog前面一小节中,我简单介绍了一下swt中的MessageBox。在JFace中,我们使用MessageDialog(org.eclipse.jface.dialogs.MessageDialog)来实现类似的功能。

如果要实现我们在上面所演示的那样一个带信息提示和确定按钮的对话框,我们只需要这样写:

MessageDialog.openInformation(shell,"Hello","Hello,world");

运行出来以后,对话框的大小可能和swt中的有一些区别。不过这样是不是很方便呢?其实JFace能做的事情通过swt编程也都可以做到,不过一般说来,JFace都简化了编程。

在MessageDialog中,类似于openXxxx的静态方法还有好几个,比如:

openWarning:打开一个带警告图标的对话框

openConfirm:打开一个只有确定和取消按钮的对话框

不过你也许注意到了,这些静态方法返回类型都不一样,有的是void,有的是boolean,这些返回值(如果有的话)就反应了用户选择了哪个按钮。比如openConfirm,如果按了确定,那么返回的就是true。

输入框:InputDialog相对来说,输入对话框的用法可能会比较负责一些,你必须InputDialog对象,然后调用它的open方法打开对话框,获得这个方法的返回值(以确定用户是点击了确定还是取消)。然后再通过getValue()方法获得用户的输入。

为了更加形象,我们举一个例子。我们还是用前面的Hello,world!程序,不过把它的createContents方法改成下面一段代码:

1 @Override

2 protected Control createContents(final Composite parent) {

3 Button button = new Button(parent, SWT.NONE);

4 button.setText("Click me!");

5 button.addSelectionListener(new SelectionAdapter() {

6 @Override

7 public void widgetSelected(SelectionEvent arg0) {

8

9 InputDialog input = new InputDialog(parent.getShell(),

10 "Input Dialog Title", "Please input some string here:",

11 "initial value", null);

12 if(input.open()== Window.OK)

13 {

14 System.out.println(input.getValue());

15 }

16 }

17

18 });

19 return parent;

20 }

21

代码段 14

运行之后,界面如下面图示:

图 15

如果按了确定的话,控制台会显示你输入的信息

小结因为前一段有些事情,所以都一直没有来得及写这个系列的文章。今天贴出的这篇文章中,通过一个简单程序演示了一个JFace程序的基本写法,同时也顺便提了一下Window和它的两个子类。关于对话框我只向大家介绍了两种最常用的,其实还是有很多的,这需要大家在实践中不断探索。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝网络 版权所有