`
eclipsesbs
  • 浏览: 20176 次
社区版块
存档分类
最新评论

第七天:JFace对话框真的很好用

阅读更多

作者:梁祺 (eclipsesbs@gmail.com)

来自:http://www.benisoft.net/day7/index.html

 

今天我们来看一下JFace提供的几个工具对话框。

  • MessageDialog:显示出错信息,一般信息,警告信息,向用户提问,或者要求用户确认。
  • MessageDialogWithToggle:同上,但是增加了一个Checkbox,允许用户选择是否将决定保存在Preference里。 这个我们在后面Preference一起介绍。
  • InputDialog:提示用户输入一个值。
  • ProgressMonitorDialog:显示长时间工作的进度。

MessageDialog

MessageDialog提供了一系列静态方法,弹出对话框用以显示出错信息,一般信息,警告信息,向用户提问, 或者要求用户确认。下面的代码演示了这五种对话框。

    public void run(IAction action) {
        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按钮。

    public static boolean open(int kind, Shell parent, String title,
            String message, int style) {

InputDialog

Eclipse还提供了InputDialog,帮助用户输入一些简单的信息。例如我们的例子InputDialogAction, 需要用户输入一个正数,当输入非数字的字符时,它会提示”Requires a number“,并将OK按钮变灰。 通过这样的方式告诉用户输入错误,必须修正后才能继续。

InputDialog的构造函数的最后一个参数validator,它负责检查输入是否符合要求。

    public InputDialog(Shell parentShell, String dialogTitle,
            String dialogMessage, String initialValue, IInputValidator validator) {

在我们这个例子里,如果输入不符合要求(小于等于0的数字),isValid()方法返回出错信息的字符串; 输入符合要求就返回null,表示没有错误。InputDialog会根据isValid()是否返回null,来设置是否将OK按钮变灰。

    public void run(IAction action) {
        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,终止工作。
    public void run(IAction action) {
        
        ProgressMonitorDialog dialog = new ProgressMonitorDialog(window.getShell());
        try {
            dialog.run(truetruenew 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使用非常方便,我们因尽量使用这些工具对话框,避免自己编写类似的代码。

分享到:
评论

相关推荐

    jface对话框

    swt、jface对话框

    JFace 类包(3.14)

    2. **Dialogs和Views**:JFace 提供了一系列预定义的对话框(Dialogs)和视图(Views)类,如InputDialog、MessageDialog、WizardDialog等,这些对话框可以快速地构建常见的用户交互。而View则允许在Eclipse RCP...

    JFace教程

    7. **命令架构**:为了更好地支持可插拔性和可扩展性,JFace 引入了一个命令架构体系,使得应用程序可以更容易地定义和组织命令。 8. **工作流支持**:对于需要实现复杂工作流的应用程序,JFace 提供了工作流支持,...

    JFace一些资料

    3. **《JFace-SWT-API.chm》**:API参考手册,包含了JFace的主要类和方法,是查询具体API功能的好帮手。 4. **《SWT-Designer教程.pdf》**:SWT Designer是一个可视化的布局编辑器,可以帮助快速构建SWT和JFace用户...

    SWT/JFACE API

    SWT (Standard Widget Toolkit) 和 JFace 是两个用于构建Java图形用户界面(GUI)的开源库,它们在Java开发领域中被广泛使用,特别是在Eclipse IDE及其插件开发中。SWT是底层的UI库,提供了与操作系统原生控件直接...

    org.eclipse.jface.snippets

    在Java开发领域,Eclipse是一个广泛使用的集成开发环境(IDE),而JFace是Eclipse平台的一部分,提供了一种高级的用户界面(UI)构建工具。"org.eclipse.jface.snippets"是Eclipse JFace的代码片段集合,它包含了一...

    SWT&jface;开发jar包很全的

    3. 对话框和首选项:JFace提供了一套标准对话框(如打开/保存文件对话框)和首选项页的实现,开发者可以方便地集成到应用中。 4. 表格和树的高级功能:JFace扩展了SWT的表格和树,增加了如分页、过滤、拖放等功能,...

    org.eclipse.jface.rar

    Eclipse JFace 是一个用于构建用户界面(UI)的高级Java框架,它是Eclipse平台的重要组成部分,主要设计目的是简化Swing和AWT等低级API的使用,提供了一套更抽象、更易于使用的API。 JFace是基于SWT(Standard ...

    JFace的源码,从官网下的

    总之,深入研究JFace的源码不仅可以帮助我们更好地使用这个库,还能提升我们的GUI编程技能,尤其是在Eclipse平台上的开发。对于想要提升自己的Eclipse插件开发能力的开发者而言,这是一个不容错过的学习资源。

    swt/jface实例开发

    【SWT/JFace实例开发】是一份针对Java GUI编程的学习资源,主要聚焦于SWT(Standard Widget Toolkit)和JFace这两个强大的图形用户界面库。SWT是Eclipse项目的一部分,它提供了一套与操作系统直接交互的原生控件,...

    SWT + JFace 入门

    8. **例子和实践**:通过阅读和运行示例代码,你可以更好地理解和掌握SWT + JFace。博客链接提供的资源可能包含实际的代码示例,这些示例将有助于加深理解。 9. **Eclipse插件开发**:SWT和JFace经常用于Eclipse...

    Eclipse SWT/Jface环境设置 DOC文件

    Eclipse SWT(Standard Widget Toolkit)和JFace是Java开发中用于构建图形用户界面(GUI)...这个文档对于初学者或准备使用SWT和JFace进行开发的人员来说是一份宝贵的资源,可以帮助他们快速上手并掌握这些工具的使用。

    jface源代码不容错过

    7. **视图和编辑器的实现**:Eclipse RCP中的视图和编辑器是通过JFace实现的,源代码能帮助我们理解这两者如何在RCP环境中协同工作。 总之,研究JFace的源代码不仅可以帮助开发者深入理解Eclipse RCP的工作原理,还...

    SWT JFace in Action - GUI Design with Eclipse 3.0-1932394273

    - **第7章:图形**:介绍了SWT提供的绘图功能,包括绘制线条、形状以及图像处理技术。 - **第8章:处理树和列表**:聚焦于树形视图和列表视图的实现,讨论了如何高效地管理和展示大量的数据项。 - **第9章:表格和...

    全面介绍SWT-JFace

    LiB.chm"这本书中,读者可以深入学习SWT和JFace的使用方法,包括控件的创建、事件处理、布局管理、数据模型的构建、对话框的使用,以及如何在Eclipse插件开发中应用SWT和JFace等。通过这本书的学习,开发者不仅可以...

    使用 JFace 工具箱.pdf清晰版

    - **JFace与SWT的结合**:JFace建立在SWT的基础上,通过提供更高级别的组件和实用程序来简化SWT的使用,例如对话框、视图、编辑器等。 - **互操作性**:JFace组件通常需要与SWT组件一起使用,以实现完整的GUI功能。 ...

    swt jface_API_CHM.zip

    4. **Dialogs**: JFace扩展了SWT的对话框,提供了一些预定义的对话框,如SelectionDialog、InputDialog等,同时提供了构建自定义对话框的工具。 5. **Table and Tree Viewer**: JFace的TableViewer和TreeViewer是对...

    11-JFace.rar_java jface

    5. **对话框(Dialogs)**:JFace包含了一系列预定义的对话框,如消息对话框、输入对话框等,这些对话框可以方便地集成到应用程序中,提供统一的用户体验。 6. **表单(Form)**:JFace的表单工具允许开发者快速创建带...

    SWT And JFace

    3. **对话框和表单**:JFace提供了对话框和表单的构建工具,如Wizard和Dialog,使得创建复杂的用户交互更为便捷。 4. **表和树的增强**:JFace对SWT的表格和树控件进行了扩展,增加了分页、排序、过滤等功能。 5. **...

    jface 入门例子

    通过上述入门例子,我们可以看到JFace如何简化了SWT的使用,提供了更高级的功能和更好的代码组织。在实际开发中,结合SWT和JFace,可以创建出高效、可维护的桌面应用程序。继续深入学习JFace,你将能够掌握更多高级...

Global site tag (gtag.js) - Google Analytics