java 进度条 swt,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();

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 使用进度条可以通过使用 JProgressBar 类来实现。JProgressBar 是 Swing 组件库的一个组件,可以用于显示任务的进度。 以下是一个简单的示例代码,演示如何在 Java 使用 JProgressBar: ```java import javax.swing.*; import java.awt.*; public class ProgressBarExample extends JFrame { private JProgressBar progressBar; public ProgressBarExample() { super("进度条示例"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); progressBar = new JProgressBar(0, 100); progressBar.setValue(0); progressBar.setStringPainted(true); getContentPane().setLayout(new FlowLayout()); getContentPane().add(progressBar); setSize(300, 100); setLocationRelativeTo(null); setVisible(true); simulateTask(); } private void simulateTask() { for(int i = 0; i <= 100; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } progressBar.setValue(i); } } public static void main(String[] args) { new ProgressBarExample(); } } ``` 在上面的示例,我们创建了一个 JFrame 窗口,并在其添加了一个 JProgressBar 组件。我们使用了 setValue() 方法来更新进度条的值,并使用了 setStringPainted() 方法来显示进度条的百分比值。 在 simulateTask() 方法,我们模拟了一个耗时的任务,并在其使用了 Thread.sleep() 方法来暂停 100 毫秒,以便能够看到进度条的变化效果。 当你运行这个示例程序时,你会看到一个进度条,它的值会从 0% 逐渐变化到 100%,表示模拟任务的进度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值