RCP里的进度条

前言

本人最近在对程序新增进度条,而rcp程序内的进度条ProgressBar有关的资料实在太少了,极难找到,因此在查询资料+自己测试后,写一篇笔记,当作记录自己的学习过程。
一切,只是开始!

测试类

  1. 说起 rcp程序中的进度条,就会想到SWT工具包中的组件(Widgets)–ProgressBar,这是最简单的进度条,而这次笔记的内容,仅仅是新增一个横向/平滑型进度条,并让它跑起来而已。
  2. 以下是一个java类,其中有新增进度条并跑起来的方法。
    下面展示一些 内联代码片
/**
*前两个是AWT中的工具类,作用是 把进度条居 笔记本电脑屏幕的中间
**/
import java.awt.Dimension; 
import java.awt.Toolkit;
/**
*接下来的几个导入的工具类,是网格布局类GridLayout、网格格子类GridData、
*SWT工具包、进度条类、Shell(打开的窗口类)、Display类有些复杂,简单讲
*这个类的对象是SWT/Jface工具包和操作系统的桥梁,每个SWT应该都需要它,当成支持
**类就行/
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
/**
 * 进度条测试类
 * @author yjru
 *
 */
public class TranProgressBar {
//定义几个参数,进度条对象、display对象
	public ProgressBar pbr;
	public Display display;
	//public static boolean stop1;
	
	public void CreateProgressBar(){
		Display display = new Display();//实例化对象
		//创建一个shell窗口,风格是无,即SWT.NULL
		Shell shell  = new Shell(display,SWT.NULL);
		//获得屏幕尺寸
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		//设置shell窗口位置为笔记本屏幕的中间,宽高分别为220,30
		shell.setBounds((d.width-220)/2, (d.height-30)/2, 220, 30);
		//设置shell窗口内为网格布局
		shell.setLayout(new GridLayout());
		//创建并实例化进度条 pbr,风格是平滑型,或者说是横向的进度条
		pbr = new ProgressBar(shell,SWT.HORIZONTAL);
		//设置进度条pbr的位置为笔记本屏幕的中间,宽高分别为480,60	
	    pbr.setBounds((d.width-480)/2, (d.height-60)/2, 480, 60);
	    //进度条布局设置为网格布局
		pbr.setLayoutData(new GridData());
		//进度条最大值为100,这在让进度条动起来时决定了它的上限
		pbr.setMaximum(100);
		//最小值零
		pbr.setMinimum(0);
		//打开shell窗口
		shell.open();
		/**当进度条的值<=100时,进入以下循环,每次先让进程睡0.5秒,再从
		*零开始,每次让进度条的值+2,直到进度条的值达到了上限100;当进度条
		*的值达到上限,关闭窗口!
		**/
		if(pbr.getSelection()<=100){
			for(int i=0;i<=50;i++){
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				pbr.setSelection(pbr.getSelection()+2);
			}
		}
		if(pbr.getSelection()==100){
			shell.dispose();
		}
	}
	
	public static void main(String[] args){
		TranProgressBar bc = new TranProgressBar();//实例化自己这个类
		bc.CreateProgressBar();//调用上面的方法测试
	}

3.以下有运行截图
在这里插入图片描述
在这里插入图片描述

线程中的进度条

1.进入了线程中,代码需要微微调整,首先时display对象,需要是该类的对应display对象。
下面展示一些 内联代码片

import java.awt.Dimension;
import java.awt.Toolkit;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
/**
 * 更新屏幕的model数据
 */
		screen.getContext().getValidationRealm()
		.exec(new Runnable() {   //这里创建了新的线程
				public void run() {   //新线程运行的方法
					/**
					* 调用方法显示进度条
					*/
						TranEditor.CreateProgressBar();
/**
	 * 创建并运行进度条,此方法只是用于在程序中跑个进度条。
	 */
	public static void CreateProgressBar(){
		//Display display = new Display();
		//只是在新增shell窗口的地方把display换成此类对应的display对象而已;
		//PlatformUI.getWorkbench().getDisplay()方法返回一个工作台的display对象
		Shell shell  = new Shell(PlatformUI.getWorkbench().getDisplay(),SWT.NULL);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();//获得屏幕尺寸
		shell.setBounds((d.width-220)/2, (d.height-30)/2, 220, 30);
		shell.setLayout(new GridLayout());
		pbr = new ProgressBar(shell,SWT.HORIZONTAL);
		pbr.setBounds((d.width-480)/2, (d.height-60)/2, 480, 60);
		pbr.setLayoutData(new GridData());
		pbr.setMaximum(100);
		pbr.setMinimum(0);
		boolean abc = !shell.isDisposed();
		//new LongRunningOperation(display,pbr).start();
		//run();
		shell.open();
		if(pbr.getSelection()<=100){
			for(int i=0;i<=50;i++){
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				pbr.setSelection(pbr.getSelection()+2);
			}
		}
		if(pbr.getSelection()==100){
			shell.dispose();
		}
	}

2.运行结果和上个的没区别,这里就不贴了,最大值100,从0开始,每次+2,到100关闭窗口。

后文

本文只是做到了 在线程中跑一个很简单的进度条,也是一个好的开始。至于如何控制在线程 开始时打开进度条,且按照进程的运行程度体现出来,这个得看各位自行思考了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值