前言
本人最近在对程序新增进度条,而rcp程序内的进度条ProgressBar有关的资料实在太少了,极难找到,因此在查询资料+自己测试后,写一篇笔记,当作记录自己的学习过程。
一切,只是开始!
测试类
- 说起 rcp程序中的进度条,就会想到SWT工具包中的组件(Widgets)–ProgressBar,这是最简单的进度条,而这次笔记的内容,仅仅是新增一个横向/平滑型进度条,并让它跑起来而已。
- 以下是一个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关闭窗口。
后文
本文只是做到了 在线程中跑一个很简单的进度条,也是一个好的开始。至于如何控制在线程 开始时打开进度条,且按照进程的运行程度体现出来,这个得看各位自行思考了。