分类:
2008-12-16 13:47:33
关于对话框,首先我要给大家介绍的却是一个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
前面一小节中,我简单介绍了一下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对象,然后调用它的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
如果按了确定的话,控制台会显示你输入的信息