作者:梁祺 (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对话框
2. **Dialogs和Views**:JFace 提供了一系列预定义的对话框(Dialogs)和视图(Views)类,如InputDialog、MessageDialog、WizardDialog等,这些对话框可以快速地构建常见的用户交互。而View则允许在Eclipse RCP...
Eclipse JFace 是一个用于构建用户界面(UI)的高级Java框架,它是Eclipse平台的重要组成部分,主要设计目的是简化Swing和AWT等低级API的使用,提供了一套更抽象、更易于使用的API。 JFace是基于SWT(Standard ...
7. **命令架构**:为了更好地支持可插拔性和可扩展性,JFace 引入了一个命令架构体系,使得应用程序可以更容易地定义和组织命令。 8. **工作流支持**:对于需要实现复杂工作流的应用程序,JFace 提供了工作流支持,...
3. **《JFace-SWT-API.chm》**:API参考手册,包含了JFace的主要类和方法,是查询具体API功能的好帮手。 4. **《SWT-Designer教程.pdf》**:SWT Designer是一个可视化的布局编辑器,可以帮助快速构建SWT和JFace用户...
SWT (Standard Widget Toolkit) 和 JFace 是两个用于构建Java图形用户界面(GUI)的开源库,它们在Java开发领域中被广泛使用,特别是在Eclipse IDE及其插件开发中。SWT是底层的UI库,提供了与操作系统原生控件直接...
在Java开发领域,Eclipse是一个广泛使用的集成开发环境(IDE),而JFace是Eclipse平台的一部分,提供了一种高级的用户界面(UI)构建工具。"org.eclipse.jface.snippets"是Eclipse JFace的代码片段集合,它包含了一...
3. 对话框和首选项:JFace提供了一套标准对话框(如打开/保存文件对话框)和首选项页的实现,开发者可以方便地集成到应用中。 4. 表格和树的高级功能:JFace扩展了SWT的表格和树,增加了如分页、过滤、拖放等功能,...
总之,深入研究JFace的源码不仅可以帮助我们更好地使用这个库,还能提升我们的GUI编程技能,尤其是在Eclipse平台上的开发。对于想要提升自己的Eclipse插件开发能力的开发者而言,这是一个不容错过的学习资源。
【SWT/JFace实例开发】是一份针对Java GUI编程的学习资源,主要聚焦于SWT(Standard Widget Toolkit)和JFace这两个强大的图形用户界面库。SWT是Eclipse项目的一部分,它提供了一套与操作系统直接交互的原生控件,...
8. **例子和实践**:通过阅读和运行示例代码,你可以更好地理解和掌握SWT + JFace。博客链接提供的资源可能包含实际的代码示例,这些示例将有助于加深理解。 9. **Eclipse插件开发**:SWT和JFace经常用于Eclipse...
Eclipse SWT(Standard Widget Toolkit)和JFace是Java开发中用于构建图形用户界面(GUI)...这个文档对于初学者或准备使用SWT和JFace进行开发的人员来说是一份宝贵的资源,可以帮助他们快速上手并掌握这些工具的使用。
7. **视图和编辑器的实现**:Eclipse RCP中的视图和编辑器是通过JFace实现的,源代码能帮助我们理解这两者如何在RCP环境中协同工作。 总之,研究JFace的源代码不仅可以帮助开发者深入理解Eclipse RCP的工作原理,还...
- **第7章:图形**:介绍了SWT提供的绘图功能,包括绘制线条、形状以及图像处理技术。 - **第8章:处理树和列表**:聚焦于树形视图和列表视图的实现,讨论了如何高效地管理和展示大量的数据项。 - **第9章:表格和...
LiB.chm"这本书中,读者可以深入学习SWT和JFace的使用方法,包括控件的创建、事件处理、布局管理、数据模型的构建、对话框的使用,以及如何在Eclipse插件开发中应用SWT和JFace等。通过这本书的学习,开发者不仅可以...
- **JFace与SWT的结合**:JFace建立在SWT的基础上,通过提供更高级别的组件和实用程序来简化SWT的使用,例如对话框、视图、编辑器等。 - **互操作性**:JFace组件通常需要与SWT组件一起使用,以实现完整的GUI功能。 ...
4. **Dialogs**: JFace扩展了SWT的对话框,提供了一些预定义的对话框,如SelectionDialog、InputDialog等,同时提供了构建自定义对话框的工具。 5. **Table and Tree Viewer**: JFace的TableViewer和TreeViewer是对...
5. **对话框(Dialogs)**:JFace包含了一系列预定义的对话框,如消息对话框、输入对话框等,这些对话框可以方便地集成到应用程序中,提供统一的用户体验。 6. **表单(Form)**:JFace的表单工具允许开发者快速创建带...
3. **对话框和表单**:JFace提供了对话框和表单的构建工具,如Wizard和Dialog,使得创建复杂的用户交互更为便捷。 4. **表和树的增强**:JFace对SWT的表格和树控件进行了扩展,增加了分页、排序、过滤等功能。 5. **...
通过上述入门例子,我们可以看到JFace如何简化了SWT的使用,提供了更高级的功能和更好的代码组织。在实际开发中,结合SWT和JFace,可以创建出高效、可维护的桌面应用程序。继续深入学习JFace,你将能够掌握更多高级...