栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RCP里的进度条

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RCP里的进度条

RCP里的进度条
  • 前言
  • 测试类
  • 线程中的进度条
  • 后文

前言

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

测试类
  1. 说起 rcp程序中的进度条,就会想到SWT工具包中的组件(Widgets)–ProgressBar,这是最简单的进度条,而这次笔记的内容,仅仅是新增一个横向/平滑型进度条,并让它跑起来而已。
  2. 以下是一个java类,其中有新增进度条并跑起来的方法。
    下面展示一些 内联代码片。
import java.awt.Dimension; 
import java.awt.Toolkit;

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();
		
		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;
		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关闭窗口。

后文

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号