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

Swt/Jface的dialog 分类总结&详细编程 Swt/Jface中提供了各种各样的Dialog,一般情况下就能满足我们的需求,现在把这些dialog介绍一下, 下一篇文章再继续将如何自定义Dialog 一、MessageDialog 1,MessageDialog的用法很简单,只需要一句话. MessageDia 阅读详情

作者:梁祺 (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( 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使用非常方便,我们因尽量使用这些工具对话框,避免自己编写类似的代码。

自定义Dialog(org.eclipse.jface.dialogs.Dialog) 阅读详情

相关推荐

jface对话框

swt、jface对话框

关于JFace中的进度条对话框(ProgressMonitorDialog类)

在Windows操作系统中,最常用的进度条对话框就是文件复制时的弹出框,如果想让用户愉快的使用你开发 的软件,那么在执行某个较长时间的操作时候,就应该弹出一个进度条提示框,告诉用户程序正在做什么. 做到什么地步了.进度条提示框可以让用户更有安全感也可以提高用户的耐心. 前面用到的SWT组件的进度条ProgressBar类太底层,还需要处理诸如线程分配的问题.现在 JFace提供了更容易使用...

weixin_34130389的博客 327

SWT/Jface文件下载进度条 组件封装代码

对SWT/Jface的进度条(ProgressMonitorDialog)进行封装,使下载文件更方便调用. DownloadProgressBar 是单个文件下载类 MultiDownloadProgressBar 是多个文件下载类 Test开头的类是测试类 支持下载完毕后自动关闭流,支持取消按钮后自动删除未下载完的文件,支持下载成功或失败后的事件监听. 调用也方便,简单,只需要传入shell,输入流,输出流(或目标文件)就可自动下载. 调用代码示例如下: InputStream is = new FileInputStream("E:\\aaa.rar"); File outFile=new File("f:\\abc.rar"); DownloadProgressBar bar = new DownloadProgressBar(shell,"downloading...", is, outFile); bar.open(); 多文件下载传入输入流数组,输出流数组(或目标文件数组)便可自动下载. 下载资源后,请自动更改包名.

java中取消按钮时间_如何在Java ProgressMonitor中省略“取消”按钮?

小编典典我在想,也许我可以要求它返回其中的组件并删除按钮使用Swing教程中的ProgressMonitorDemo(由BalusC链接)进行了以下更改:public void propertyChange(PropertyChangeEvent evt) {if ("progress" == evt.getPropertyName() ) {int progress = (Integer) ev...

weixin_30996983的博客 217

从零开始,用Cadence Virtuoso手把手仿真一个1.5V LDO(附完整电路与仿真脚本)

本文详细介绍了如何使用Cadence Virtuoso从零开始仿真一个1.5V LDO,包括环境准备、电路导入、Testbench构建、核心仿真类型分析以及高级调试技巧。通过完整的电路与仿真脚本,帮助读者掌握LDO设计与仿真的关键技术,提升电路设计能力。

weixin_31309419的博客 445

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3639

jface对话框demo

package testDialog; import java.io.FileNotFoundException; import java.lang.reflect.InvocationTargetException; import java.sql.SQLException; import org.eclipse.core.runtime.IProgressMonitor; imp...

20032334 464

微信自动化必备软件:inspect(获取微信界面元素)

SaveButton10015.2:1 ✅(合格)Passed ✅说明这个控件完全符合无障碍标准。

Ven%的博客 1381

JFace中对话框的经典应用

    在项目中必须针对Jface中代码进行相关的重写实现自己的功能。 源代码如下: 在项目中不管是属性页还是对话框如果要添加特殊的记忆功能(在项目启动之后,显示上次或者以前的信息),一 般都要是写在本地应用系统中的xml中。 package com.vnvntrip.plugin.dev.views.custom; import java.io.IOException...

topMan'blog 235

四款办公Agent实测对比:WorkBuddy、千问办公、库库AI、豆包工作怎么选

AI Agent是一种能感知环境、自主决策并执行动作的智能系统,其核心在于工具调用、状态管理与错误恢复构成的执行闭环。在办公场景中,任务边界清晰、容错率高、重复性强,使Agent成为最容易落地的方向。通过调用本地文件、脚本或办公套件,Agent能自动完成文件批量处理、文档摘要、会议纪要等重复劳动,显著提升工作效率。目前WorkBuddy、千问办公、库库AI、豆包工作等产品分别从本地操作、办公套件嵌入、知识处理、轻量助手等路线切入,用户可根据自身场景选择。

weixin_29052717的博客 521

告别浏览器崩溃!EasyPlayer.js长时间播放FLV视频内存泄漏排查指南

本文针对EasyPlayer.js长时间播放FLV视频导致浏览器内存泄漏和崩溃的问题,提供了一套系统性排查与解决方案。核心策略包括将视频编码从H.265转为H.264以降低解码压力,以及将传输协议从HTTP-FLV切换至WebRTC以优化资源管理。文章还详细介绍了播放器实例生命周期管理、浏览器开发者工具监控等精细化排查手段,帮助开发者实现稳定、长时间的多路视频播放。

weixin_29229055的博客 173

Swt/Jface中提供的dialog

Swt/Jface中提供的dialog Swt/Jface中提供了各种各样的Dialog,一般情况下就能满足我们的需求,现在把这些dialog介绍一下,下一篇文章再继续将如何自定义Dialog一、MessageDialog1,MessageDialog的用法很简单,只需要一句话. MessageDialog.openInfomation(shell,title,message);Messag...

weixin_33841722的博客 233

VSCode + Latex 配置

1. 安装VSCode VSCode下载 next,next就安装好了。 2. 配置VSCode 2.1 安装LaTeX Workshop插件 install,安装LaTeX Workshop插件 2.2 修改 user setting 点击左下角,进入用户设置 点击上图标记的部分,选择 打开settings.json 具体配置文件如下: { "latex-workshop.la...

一只特立独行的猪 10万+

SWT/JFace中各种对话框的使用举例

Dialog

张德中的专栏 1269

2025年数学建模美赛(MCM)C题阅读与思考

2025年数学建模美赛(MCM)C题阅读与思考

carefreekid123的博客 7339

基于simulink的多能源系统协同与能源互联网的电网系统场景实例:虚拟电厂(VPP)中电网与储能集群的协同控制

本文详细介绍了使用Simulink构建虚拟电厂(VPP)与储能集群协同控制系统的完整建模过程。主要内容包括:1) VPP系统架构设计;2)分步骤建模过程,涵盖虚拟电厂系统创建、储能单元与集群建模、VPP控制器设计(核心)以及协同控制场景仿真;3)性能分析与典型应用场景。通过混合整数线性规划优化调度和智能指令分解策略,实现了VPP参与电力市场交易、电网调频调峰等功能,验证了系统在提升可再生能源消纳率(96%)、降低电网峰谷差(35%)等方面的优异性能。该建模方法为能源互联网中的分布式资源聚合与协同控制提供了实

xiaoheshang_123的博客 470

Eclipse插件开发之Jface

  1. 如何使用开源中国之码云  2. SWT UI之托盘对象Tray和TrayItem  3. jface常用对话框  4. SWT UI之分隔框容器SashForm  5. SWT UI之进度条ProgressBar  6. SWT UI之时间控件DateTime  7. SWT layout之堆叠布局StackLayout  8. swt & jface ui可视化工具安装  9. swt & jface ui可视化工具使用一  10. swt & jface ui可视化工具使用二  11. 用户小系统之表结构设计  12. 用户小系统之DAO设计与开发  13. 用户小系统之添加用户  14. 用户小系统之查询所有用户  15. 用户小系统之更新用户

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

怎样正确使用java_eclipse_java – 正确使用Eclipse 4中的ProgressMonitorDialog

ProgressMonitorDialog是一个棘手的代码.我想你缺少的部分是IProgressMonitor#worked(int),它会“增长”进度条.下面是一个代码示例,应该说明如何使用它:public class Progress {public static void main(String[] args){// Create your new ProgressMonitorDialog...

weixin_42356292的博客 438

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Eclipse JFace 对话框显示中文(弹出消息提示框)

JFace中的对话框是通过SWT中的Shell 窗口封装来的,调用的是SWT中的button控件对象,查看MessageDialog类的源代码可以发现设置按钮文字是通过字符常量来设定的,默认为英文。若要显示中文提示,需加入中文语言包。     在《Eclipse从入门到精通》(第二版)中,是以Eclipse 3.2.1版本进行说明的。但从Eclipse官网上看,似乎语言包也只支持到3.2,后续就

zacry的专栏 3332

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Eclipse平台中“进度条对话框”(ProgressMonitorDialog)的简单实现

运行环境:Eclipse 3.0.x下面是的方法实现了一个简单的“进度条对话框”:private byte[] progressMonitorDialogTest(final String bhContent, final String root, final String userName,   final String pwd, final String payload) throws

zorro_run的专栏 8903

SWT/Jface ProgressBar-进度条(带来回移动效果的进度条)

销毁的逻辑没有怎么实现-自己捕获异常做相关处理就OK了   /**  * @Title: Test.java  * @Description: TODO  * @author zouxs  * @date 2012-9-25  */ public class ProgressBarTest {  public void show_ProgressBar(Composite par

Hello Eclipse Plugin 黑夜 3685

RCP 中的进度条

第一部分:参考自,http://blog.youkuaiyun.com/heruiup/article/details/5458429 基于Eclipse RCP 开发应用程序时显示进度条的集中方法: 使用 ProgressMonitorDialog 对话框  ProgressMonitorDialog 对话框 是用于显示进度条的对话框,它必须配合接口 IRunnableWithProgress 进行

平江夜弹的专栏 1557

JAVA.SWT/JFace: JFace篇之JFace对话框以及日历DateTime控件

《Eclipse SWT/JFACE 核心应用》 清华大学出版社 16 JFace对话框 16.1 JFace对话框概述 ◆ ErrorDialog:可根据错误级别来显示错误信息,一般用于Eclipse工作台。 ◆ MessageDialog:可显示提示信息的对话框,类似于SWT的对话框,但比SWT功能强大。 ◆ MessageDialogWithToggle:一般在保存首选项所设置的值时

haohaodigua的专栏 3893

解决swt进度条假死

ProgressMonitorDialog progressMonitorDialog = new ProgressMonitorDialog(null);        progressMonitorDialog.setCancelable(true);                        try {            progressMonitorDialog.run(true,...

qun715715 582

Eclipse 插件开发 ProgressMonitorDialog 进度条显示的简单应用

我们在编写插件过程中,如果

程序猿的专栏 3327

第十天:Editor是怎么打开文件和保存文件的

作者:梁祺 (eclipsesbs@gmail.com) 例子:http://www.benisoft.net/day10/index.html 在Itinerary的例子里,所以行程计划都保存在后缀为.iti的XML文件中。用户打开.iti文件,编辑后可以选择保存,或者另存为新的文件。今天就来看一下整个过程。 打开文件 前面我们介绍过,Eclipse通过文件后缀名来决定该文件该用

Eclipse 按步就搬 1565
上一篇: 第六条:天天用到的对话框是怎么做的
下一篇: 第八天:那SWT提供了哪些对话框呢
std3lqi
博客等级 码龄24年 1粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值