SET/JFace ProgressIndicator的使用以及来回滚动进度条实际使用示例
关于进度条的意义,不多说了,之前了解过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的使用以及来回滚动进度条实际使用示例相关推荐
- MFC创建处理中进度条,循环滚动进度条的方法
创建一个不显示实际进度的循环滚动进度条,类似于Windows XP启动界面的进度条 新建一个MFC项目TestProgress,编辑界面,添加一个进度条,两个按钮,实现点击start进度条循环滚动,点 ...
- 项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)
系列第二篇,话不多说,直接进入正题 事业部能源监控看板展示视频 1.进度条组件 因为整个看板有四处地方用到,结合上一期提到的内容,我们优先考虑将这个模块做成组件 UED给的样式用echarts会很麻烦 ...
- CSS使用线性渐变实现滚动进度条
效果查看:https://codepen.io/Chokcoco/pen/KbBXQM?editors=1100 CSS: body {position: relative;padding: 50px ...
- bootstrap 滚动 进度条_bootstrap实现动态进度条效果
Bootstrap的动态进度条: html: 创建一个modal 这里使用fade先将modal隐藏起来,然后modal里面嵌入progress 代码很简单 保存中:{{length}}% PS: ...
- bootstrap 滚动 进度条_bootstrap动态进度条怎么搞
在本教程中,您将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前 ...
- MFC基于Progress动态滚动进度条
1. 在对话框上新建一个滚动条控件IDC_PROGRESS1 2. 关联一个control类型的变量m_progress 具体步骤:右击进度条,添加变量 常用方法: **SetRange方法用来设置进 ...
- vue vue3 实现滚动进度条,斑马纹进度条
vue实现进度条 效果如下 使用方法 <div style="width: 400px;text-align: center; margin: 0 auto">< ...
- jquery实现同时展示多个tab标签+左右箭头实现来回滚动
内容: jquery实现同时展示多张图片+定时向左单张滚动+前后箭头插件 jquery实现同时展示多个tab标签+左右箭头实现来回滚动 小颖最近的项目要实现类似如下效果: 蓝色框圈起来的分别是向上翻. ...
- html图片滚动首尾互联,网页中多个图片首尾相接来回滚动
网页中多个图片首尾相接来回滚动这个功能用JavaScript来实现的. 下面是页面中的显示代码: border=0 cellspace="0"> vAlign=top> ...
最新文章
- xml提示无法连接到远程服务器,异步调用WebService时,如何捕捉“无法连接远程服务器”异常...
- ResNet被全面超越了,是Transformer干的:依图科技开源“可大可小”T2T-ViT,轻量版优于MobileNet...
- Qt 4.3 公布揭晓
- 1.springMVC+spring+Mybatis的整合思路
- maven junit scope test坑
- oracle基本的操作命令,oracle命令基本操作
- Solaris上的开发环境安装及设置
- 错误的艺术!20个创意的404错误页面设计
- 试题7 算法训练 P0505(最右边的那个非0的数字)
- 【转】js如何准确获取当前页面url网址信息
- 对称密码(共享秘钥密码)
- mgetnx redis_redis-cluster集群模式下使用pipeline,mget,mset批量操作
- 工作一周年,带你认识杭州最好的电商公司
- Unity - Timeline 之Creating a Timeline Asset and Timeline instance(创建Timeline Asset和Timeline 实例)
- python处理can协议文件_二、如何解决:python:Can't reopen .pyc file
- iOS 防止截屏、录屏技术
- 分布式事务系列一:BASE,一种ACID的替代方案(eBay分布式事务解决方案)
- 2022081班李亚楠20220905
- 广州软博前端实习生面经
- 【转】关于IE7 z-index问题完美解决方案
热门文章
- PowerCmd(命令行增强工具) 2.2 免费版
- 【转】MyEclipse快捷键大全(绝对全)
- PHP 读取JSON数据
- sql单表简单的分页脚本
- Android View的绘制流程简述 Android自定义View(一)
- Android 中activity中传递数据的方式
- 两种方式实现登录跳转新窗体
- Tennis Game CodeForces - 496D(唯一分解定理,费马大定理)
- Golang原生sql操作Mysql数据库增删改查
- Python入门学习-DAY27- isinstance与issubclass、反射、内置方法