java 进度条 swt,SWT中的进度条

本文介绍如何使用Eclipse SWT实现进度条的线程控制。通过创建线程来更新进度条,并能在用户点击取消按钮时停止线程,避免线程资源浪费。文章提供了完整的代码示例。

在进行开发的过程中,经常看到很多软件安装的时候会显示进度,在取消的时候线程也随着取消。所以我们将要进行怎样用线程对进度条进行控制。

当单击“开始”按钮时,创建一个线程;当单击取消按钮时,可以结束线程,这样就达到了对线程的控制,不会让线程自生自灭了。

先上图:

0818b9ca8b590ca3270a3433284dd417.png

关键代码如下:

package com.wyy.ProgressbarComplex;

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.ProgressBar;

import org.eclipse.swt.widgets.Shell;

public class ProgressBarComplex {

//表示线程的状态

static boolean bCancel=false;

public static void main(String[] args){

Display display = new Display();

final Shell shell = new Shell(display);

shell.setText("Progress");

shell.setLayout(new GridLayout(2,false));

//开始和取消按钮

final Button start = new Button(shell, SWT.NONE);

start.setText("开始");

Button cancel = new Button(shell, SWT.NONE);

cancel.setText("取消");

//创建滚动条实例

final ProgressBar progressBar = new ProgressBar(shell, SWT.HORIZONTAL);

GridData data = new GridData();

data.horizontalSpan=2;

data.grabExcessHorizontalSpace = true;

progressBar.setLayoutData(data);

progressBar.setMaximum(100);

progressBar.setMinimum(0);

final int maximun = progressBar.getMaximum();

final int minimus = progressBar.getMinimum();

//为开始按钮注册事件

start.addSelectionListener(new SelectionAdapter() {

//当单击开始按钮时

@Override

public void widgetSelected(SelectionEvent e) {

//首先设置“开始”按钮为不可用状态

start.setEnabled(false);

//创建更新进度条的线程

Runnable runnable = new Runnable(){

public void run(){

for(int i = minimus;i

try{

Thread.sleep(100);

}catch (Exception e) {

}

//注意在更新进度条时加上了判断线程状态的条件

shell.getDisplay().asyncExec(new Runnable() {

@Override

public void run() {

if(progressBar.isDisposed())

return;

//如果此时取消了线程,将进度条设置为初始状态

if(bCancel){

progressBar.setSelection(0);

}

progressBar.setSelection(progressBar.getSelection()+1);

}

});

//如果此时取消了线程,结束该循环,这个线程也就结束了

//并重置线程状态

if(bCancel){

bCancel=false;

break;

}

}

}

};

//启动这个线程

new Thread(runnable).start();

}

});

//注册“取消”按钮事件

cancel.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

if(!bCancel){

bCancel = true;

start.setEnabled(true);

}

}

});

shell.pack();

shell.open();

while(!display.isDisposed()){

if(!display.readAndDispatch()){

display.sleep();

}

}

display.dispose();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值