作者:梁祺 (eclipsesbs@gmail.com)
来自:http://www.benisoft.net/day7/index.html
今天我们来看一下JFace提供的几个工具对话框。
- MessageDialog:显示出错信息,一般信息,警告信息,向用户提问,或者要求用户确认。
- MessageDialogWithToggle:同上,但是增加了一个Checkbox,允许用户选择是否将决定保存在Preference里。 这个我们在后面Preference一起介绍。
- InputDialog:提示用户输入一个值。
- ProgressMonitorDialog:显示长时间工作的进度。
MessageDialog
MessageDialog提供了一系列静态方法,弹出对话框用以显示出错信息,一般信息,警告信息,向用户提问, 或者要求用户确认。下面的代码演示了这五种对话框。
MessageDialog.openInformation(
window.getShell(),
"Day7",
"Hello, MessageDialog.openInformation");
MessageDialog.openWarning(
window.getShell(),
"Day7",
"Hello, MessageDialog.openWarning");
MessageDialog.openError(
window.getShell(),
"Day7",
"Hello, MessageDialog.openError");
boolean yes = MessageDialog.openQuestion(
window.getShell(),
"Day7",
"Hello! Are you MessageDialog.openQuestion?");
boolean ok = MessageDialog.openConfirm(
window.getShell(),
"Day7",
"Hello! Do you confirm to close MessageDialog.openConfirm?");
}
MessageDialog还有一个更加一般的方法open(),通过设置kind为
- MessageDialog.ERROR
- MessageDialog.INFORMATION
- MessageDialog.QUESTION
- MessageDialog.WARNING
- MessageDialog.CONFIRM
显示上述五种对话框。另外,使用MessageDialog.QUESTION_WITH_CANCEL,在QUESTION对话框可以多一个Cancel按钮。
String message, int style) {
InputDialog
Eclipse还提供了InputDialog,帮助用户输入一些简单的信息。例如我们的例子InputDialogAction, 需要用户输入一个正数,当输入非数字的字符时,它会提示”Requires a number“,并将OK按钮变灰。 通过这样的方式告诉用户输入错误,必须修正后才能继续。
InputDialog的构造函数的最后一个参数validator,它负责检查输入是否符合要求。
String dialogMessage, String initialValue, IInputValidator validator) {
在我们这个例子里,如果输入不符合要求(小于等于0的数字),isValid()方法返回出错信息的字符串; 输入符合要求就返回null,表示没有错误。InputDialog会根据isValid()是否返回null,来设置是否将OK按钮变灰。
InputDialog dialog = new InputDialog(window.getShell(), "Day7",
"Input a positive number.", "20", new IInputValidator() {
@Override
public String isValid(String newText) {
try {
int n = Integer.parseInt(newText);
if (n > 0) {
return null;
} else {
return "Requires positive number";
}
} catch (NumberFormatException e) {
return "Requires a number";
}
}
});
if (Window.OK == dialog.open()) {
MessageDialog.openInformation(window.getShell(), "Day7",
"The number is " + dialog.getValue());
}
}
ProgressMonitorDialog
ProgressMonitorDialog可以用来显示一个长时间工作的进度,以便用户了解该工作的进展。
使用ProgressMonitorDialog非常简单,首先创建一个ProgressMonitorDialog对象,然后调用它的run(...)方法, 这个方法由三个参数:
- fork:设置为true,使得工作在非UI线程里运行。
- cancelable:设置为true,使得用户可以取消这个长时间工作。
- runnable:IRunnableWithProgress对象,这个例子里,我们用了一个匿名类。
IRunnableWithProgress接口只有一个方法run(...),它接受参数IProgressMonitor对象, 我们通过和这个对象来控制进度条。
- IProgressMonitor.beginTask()方法用来启动一个任务,第一个参数是用于显示的任务名, 第二个参数是任务量,这个例子要睡十秒,所以我们设任务量为10。
- 接下来,每睡一秒,调用worked()方法来更新任务完成量1。
- 最后调用done()方法来告诉进度条任务全部完成。
这里有两个Exception需要关注一下。
- 如果在工作进行时有任何Exception需要终止, 需要将这个Exception封装在InvocationTargetException里抛出,这样整个工作就被终止了。外面的代码 捕获到InvocationTargetException,就知道任务出问题了,调用getCause()方法获得引起错误的异常。
- 当检测到用户按Cancel按钮取消整个工作时,就抛出InterruptedException,终止工作。
ProgressMonitorDialog dialog = new ProgressMonitorDialog(window.getShell());
try {
dialog.run(true, true, new IRunnableWithProgress(){
@Override
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
monitor.beginTask("Sleep ...", 10);
for (int i = 0; i < 10; i ++) {
if (monitor.isCanceled()) {
throw new InterruptedException();
}
Thread.sleep(1000);
monitor.worked(1);
}
monitor.done();
}});
MessageDialog.openInformation(window.getShell(), "Day7",
"10 seconds elapsed");
} catch (InvocationTargetException e) {
MessageDialog.openError(window.getShell(), "Day7",
"Exception: " + e.getMessage());
} catch (InterruptedException e) {
MessageDialog.openInformation(window.getShell(), "Day7",
"User cancels it.");
}
}
MessageDialog和ProgressMonitorDialog使用非常方便,我们因尽量使用这些工具对话框,避免自己编写类似的代码。
相关推荐
swt、jface对话框
SWT和Jface开发使用必使用jar包之:jface核心jar包,配置其他使用
主要讲述了Jface向导式对话框的编写及代码。能够正确的运行在Eclipse中,希望能帮有所帮助
#jface-maven集成测试##开发环境myeclipse2014中新建jface-application将自动引用的jar定义为Userlibrary:swt后引用入项目jdk版本:1.7##打包部署:flatjar进行程序打包,JavaLauncher创建exe执行文件##待完善spring...
第7章 SWT布局管理器 98 7.1 布局管理器概述 98 7.1.1 绝对定位 98 7.1.2 托管定位 98 7.1.3 常见的布局管理器 100 7.2 FillLayout(充满式布局) 100 7.2.1 水平填充(默认)和垂直填充 101 7.2.2 ...
SWT和Jface开发使用必使用jar包之:equinox包,配合其他jar包一起使用
swt&jface英文教程 书名:The Definitive Guide to SWT and JFace by:by Robert Harris and Rob Warner
JFace教程 网盘
讲解如何使用jface工具箱.
SWT和Jface开发使用必使用jar包之:commands包,配合其他jar包一起使用
jface programing
swt/Jface用到的最基本的jar包
Eclipse SWT_JFace开发实战精解
Eclipse SWT/Jface环境设置 此包是DOC文件,内容包括: Eclipse SWT/Jface环境设置
SWT&jface;开发jar包很全的SWT&jface;开发jar包很全的SWT&jface;开发jar包很全的SWT&jface;开发jar包很全的
快速学习swt jface eclipse 开发
《Eclipse SWT/Jface核心应用》...第2篇介绍了SWT基本控件的使用,以及事件处理、布局等SWT基本知识的应用。第3篇介绍了关于SWT的高级应用。第4篇介绍了JFace框架的知识及其应用。第5篇介绍了最新的RCP应用程序的开发。
SWT JFACE 编程笔记 , 比较适合刚 解除 java swt jface 的开发人员
SWT/JFace开发实例
swt jface jar swt jface jar swt jface jar