关于进度条的意义,不多说了,之前了解过SWT的ProgressBar,网上教程很多,自己测试也没问题,但是当我尝试将这个东西应用到实际项目中时,才发现真的好难,因为实际的项目中,长时间处理的东西都在主线程中,一旦执行起这些任务,SWT的这个进度条就动不了了,特别麻烦,后来反编译了TC的登录界面,发现用了一个叫ProgressIndicator的东西,一看源码,原来是JFace的东西,稍微研究了下,确实比较好用,原来以为JFace把线程那些都封装了,只要调用就可以,兴致勃勃地用到项目里,结果一执行,又傻眼了,还是跟SWT的那个一样,进度条不动!后来还是用多线程实现了功能,在新开辟的线程里,我可以处理自己的业务,然后再将相应结果显示在界面上,例子里是计算圆周率的算法,比较耗时间。感觉比那些教程里直接线程休眠比较容易理解。

  1 import org.eclipse.jface.dialogs.ProgressIndicator;
  2 import org.eclipse.swt.SWT;
  3 import org.eclipse.swt.events.SelectionAdapter;
  4 import org.eclipse.swt.events.SelectionEvent;
  5 import org.eclipse.swt.widgets.Button;
  6 import org.eclipse.swt.widgets.Display;
  7 import org.eclipse.swt.widgets.Label;
  8 import org.eclipse.swt.widgets.Shell;
  9
 10 public class ProgressIndicatorTest {
 11
 12     protected Shell shell;
 13     private ProgressIndicator progressIndicator;
 14     private Label lblNewLabel;
 15     private double result;
 16
 17     /**
 18      * Launch the application.
 19      * @param args
 20      */
 21     public static void main(String[] args) {
 22         try {
 23             ProgressIndicatorTest window = new ProgressIndicatorTest();
 24             window.open();
 25         } catch (Exception e) {
 26             e.printStackTrace();
 27         }
 28     }
 29
 30     /**
 31      * Open the window.
 32      */
 33     public void open() {
 34         Display display = Display.getDefault();
 35         createContents();
 36         shell.open();
 37         shell.layout();
 38         while (!shell.isDisposed()) {
 39             if (!display.readAndDispatch()) {
 40                 display.sleep();
 41             }
 42         }
 43     }
 44
 45     /**
 46      * Create contents of the window.
 47      */
 48     protected void createContents() {
 49         shell = new Shell(SWT.CLOSE);
 50         shell.setSize(350, 80);
 51         shell.setText("圆周率计算");
 52         shell.setLayout(null);
 53
 54         Button btnNewButton = new Button(shell, SWT.NONE);
 55         btnNewButton.setBounds(128, 28, 81, 20);
 56         btnNewButton.setText("计算");
 57
 58         progressIndicator = new ProgressIndicator(shell,SWT.BORDER);
 59         progressIndicator.setBounds(0, 15, 350, 10);
 60
 61         lblNewLabel = new Label(shell, SWT.NONE);
 62         lblNewLabel.setBounds(0, 0, 350, 16);
 63         lblNewLabel.setAlignment(SWT.CENTER);
 64         lblNewLabel.setText("");
 65
 66         btnNewButton.addSelectionListener(new SelectionAdapter() {
 67             @Override
 68             public void widgetSelected(SelectionEvent e) {
 69                 btnNewButton.setEnabled(false);
 70                 progressIndicator.beginAnimatedTask();
 71                 lblNewLabel.setText("正在计算,请稍后...");
 72                 new Thread(new Runnable() {
 73
 74                     @Override
 75                     public void run() {
 76                         long start = System.currentTimeMillis();
 77                         result = start(10000000000L);
 78                         long end = System.currentTimeMillis();
 79                         long time = (end-start)/100;
 80                         final float t = time/10.0f;
 81                         Display.getDefault().syncExec(new Runnable() {
 82
 83                             @Override
 84                             public void run() {
 85                                 lblNewLabel.setText("计算完成,耗时:"+t+"秒  计算结果为:"+result);
 86                                 progressIndicator.done();
 87                                 btnNewButton.setEnabled(true);
 88                             }
 89                         });
 90                     }
 91                 }).start();
 92             }
 93             private double start(long n){
 94                 int i = 1;
 95                 double x = 0d;
 96                 while(i<=n){
 97                     if(i%2==0){
 98                         x = x-1.00/(2*i-1);
 99                     }else{
100                         x = x+1.00/(2*i-1);
101                     }
102                     i++;
103                 }
104                 return x*4;
105             }
106         });
107     }
108 }

转载于:https://www.cnblogs.com/plumsq/p/8418624.html

SET/JFace ProgressIndicator的使用以及来回滚动进度条实际使用示例相关推荐

  1. MFC创建处理中进度条,循环滚动进度条的方法

    创建一个不显示实际进度的循环滚动进度条,类似于Windows XP启动界面的进度条 新建一个MFC项目TestProgress,编辑界面,添加一个进度条,两个按钮,实现点击start进度条循环滚动,点 ...

  2. 项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)

    系列第二篇,话不多说,直接进入正题 事业部能源监控看板展示视频 1.进度条组件 因为整个看板有四处地方用到,结合上一期提到的内容,我们优先考虑将这个模块做成组件 UED给的样式用echarts会很麻烦 ...

  3. CSS使用线性渐变实现滚动进度条

    效果查看:https://codepen.io/Chokcoco/pen/KbBXQM?editors=1100 CSS: body {position: relative;padding: 50px ...

  4. bootstrap 滚动 进度条_bootstrap实现动态进度条效果

    Bootstrap的动态进度条: html: 创建一个modal   这里使用fade先将modal隐藏起来,然后modal里面嵌入progress 代码很简单 保存中:{{length}}% PS: ...

  5. bootstrap 滚动 进度条_bootstrap动态进度条怎么搞

    在本教程中,您将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前 ...

  6. MFC基于Progress动态滚动进度条

    1. 在对话框上新建一个滚动条控件IDC_PROGRESS1 2. 关联一个control类型的变量m_progress 具体步骤:右击进度条,添加变量 常用方法: **SetRange方法用来设置进 ...

  7. vue vue3 实现滚动进度条,斑马纹进度条

    vue实现进度条 效果如下 使用方法 <div style="width: 400px;text-align: center; margin: 0 auto">< ...

  8. jquery实现同时展示多个tab标签+左右箭头实现来回滚动

    内容: jquery实现同时展示多张图片+定时向左单张滚动+前后箭头插件 jquery实现同时展示多个tab标签+左右箭头实现来回滚动 小颖最近的项目要实现类似如下效果: 蓝色框圈起来的分别是向上翻. ...

  9. html图片滚动首尾互联,网页中多个图片首尾相接来回滚动

    网页中多个图片首尾相接来回滚动这个功能用JavaScript来实现的. 下面是页面中的显示代码: border=0 cellspace="0"> vAlign=top> ...

最新文章

  1. xml提示无法连接到远程服务器,异步调用WebService时,如何捕捉“无法连接远程服务器”异常...
  2. ResNet被全面超越了,是Transformer干的:依图科技开源“可大可小”T2T-ViT,轻量版优于MobileNet...
  3. Qt 4.3 公布揭晓
  4. 1.springMVC+spring+Mybatis的整合思路
  5. maven junit scope test坑
  6. oracle基本的操作命令,oracle命令基本操作
  7. Solaris上的开发环境安装及设置
  8. 错误的艺术!20个创意的404错误页面设计
  9. 试题7 算法训练 P0505(最右边的那个非0的数字)
  10. 【转】js如何准确获取当前页面url网址信息
  11. 对称密码(共享秘钥密码)
  12. mgetnx redis_redis-cluster集群模式下使用pipeline,mget,mset批量操作
  13. 工作一周年,带你认识杭州最好的电商公司
  14. Unity - Timeline 之Creating a Timeline Asset and Timeline instance(创建Timeline Asset和Timeline 实例)
  15. python处理can协议文件_二、如何解决:python:Can't reopen .pyc file
  16. iOS 防止截屏、录屏技术
  17. 分布式事务系列一:BASE,一种ACID的替代方案(eBay分布式事务解决方案)
  18. 2022081班李亚楠20220905
  19. 广州软博前端实习生面经
  20. 【转】关于IE7 z-index问题完美解决方案

热门文章

  1. PowerCmd(命令行增强工具) 2.2 免费版
  2. 【转】MyEclipse快捷键大全(绝对全)
  3. PHP 读取JSON数据
  4. sql单表简单的分页脚本
  5. Android View的绘制流程简述 Android自定义View(一)
  6. Android 中activity中传递数据的方式
  7. 两种方式实现登录跳转新窗体
  8. Tennis Game CodeForces - 496D(唯一分解定理,费马大定理)
  9. Golang原生sql操作Mysql数据库增删改查
  10. Python入门学习-DAY27- isinstance与issubclass、反射、内置方法