java swing美好实例_Java SwingWorkder使用实例

首先考虑的就是Swing内部的 SwingWorkder对象,但是网上现成的例子不好找,主要参照了网上的资料,自己整理了一个。

注意:SwingWorkder对象只能执行一次,不能重复执行!例如点击开始,结束后,就不能再次开始了。

import java.awt.BorderLayout;

import java.awt.event.*;

import java.beans.PropertyChangeEvent;

import java.beans.PropertyChangeListener;

import java.util.List;

import java.util.concurrent.ExecutionException;

import javax.swing.*;

import javax.swing.SwingWorker;

public class SwingWorkerSample {

public static void main(String[] args) {

// 外观定义

try {

UIManager

.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

} catch (Exception ex) {

}

// 窗体

JFrame f = new JFrame("SwingWorker Sample");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 表示区

final JTextArea taOutput = new JTextArea(15, 30);

JScrollPane sp = new JScrollPane(taOutput);

f.add(sp);

// 底部进度条

final JProgressBar progressBar = new JProgressBar();

f.add(BorderLayout.SOUTH, progressBar);

// 开始按钮

JButton b = new JButton("开始");

f.add(BorderLayout.NORTH, b);

// 结束按钮

JButton b2 = new JButton("结束");

f.add(BorderLayout.AFTER_LINE_ENDS, b2);

// SwingWorker类

final SwingWorker sw = new SwingWorker() {

/** 执行操作 */

@Override

protected Integer doInBackground() throws Exception {

int sum = 0;

if (!this.isCancelled()) {

for (int i = 1; i <= 10; ++i) {

sum += i;

publish(new int[] { i, sum });// 调用表示中间结果

setProgress(i * 10);// 进度条

Thread.sleep(1000);

}

}

return sum;

}

/** 表示中间结果 */

@Override

protected void process(List chunks) {

StringBuilder sb = new StringBuilder();

for (int[] values : chunks) {

sb.append(String.format("累加%d等于%d%n", values[0], values[1]));

}

taOutput.append(sb.toString());

}

/** 处理完成 */

@Override

protected void done() {

if (this != null && !this.isDone()) {

try {

int result = get();

taOutput.append("完了。 合计" + result + "\n");

} catch (InterruptedException ex) {

} catch (ExecutionException ex) {

}

}

}

};

// 进度条表示

sw.addPropertyChangeListener(new PropertyChangeListener() {

@Override

public void propertyChange(PropertyChangeEvent evt) {

if ("progress".equals(evt.getPropertyName())) {

progressBar.setValue((Integer) evt.getNewValue());

}

}

});

// 开始按钮事件

b.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

sw.execute();// 异步调用SwingWorkder

}

});

// 结束按钮

b2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if (sw != null && !sw.isDone()) {

// Cancel

sw.cancel(true);

}

JOptionPane.showMessageDialog(null, "结束!");

}

});

// 窗体表示

f.pack();

f.setVisible(true);

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值