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
)
ApplicationWindow
ApplicationWindow
除了具有
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
和它的两个子类。关于对话框我只向大家介绍了两种最常用的,其实还是有很多的,这需要大家在实践中不断探索。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=396897