Java SwingWorkder使用實(shí)例
首先考慮的就是Swing內(nèi)部的 SwingWorkder對(duì)象,但是網(wǎng)上現(xiàn)成的例子不好找,主要參照了網(wǎng)上的資料,自己整理了一個(gè)。
注意:SwingWorkder對(duì)象只能執(zhí)行一次,不能重復(fù)執(zhí)行!例如點(diǎn)擊開始,結(jié)束后,就不能再次開始了。
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);
// 表示區(qū)
final JTextArea taOutput = new JTextArea(15, 30);
JScrollPane sp = new JScrollPane(taOutput);
f.add(sp);
// 底部進(jìn)度條
final JProgressBar progressBar = new JProgressBar();
f.add(BorderLayout.SOUTH, progressBar);
// 開始按鈕
JButton b = new JButton("開始");
f.add(BorderLayout.NORTH, b);
// 結(jié)束按鈕
JButton b2 = new JButton("結(jié)束");
f.add(BorderLayout.AFTER_LINE_ENDS, b2);
// SwingWorker類
final SwingWorker<Integer, int[]> sw = new SwingWorker<Integer, int[]>() {
/** 執(zhí)行操作 */
@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 });// 調(diào)用表示中間結(jié)果
setProgress(i * 10);// 進(jìn)度條
Thread.sleep(1000);
}
}
return sum;
}
/** 表示中間結(jié)果 */
@Override
protected void process(List<int[]> 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("完了。 合計(jì)" + result + "\n");
} catch (InterruptedException ex) {
} catch (ExecutionException ex) {
}
}
}
};
// 進(jìn)度條表示
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();// 異步調(diào)用SwingWorkder
}
});
// 結(jié)束按鈕
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (sw != null && !sw.isDone()) {
// Cancel
sw.cancel(true);
}
JOptionPane.showMessageDialog(null, "結(jié)束!");
}
});
// 窗體表示
f.pack();
f.setVisible(true);
}
}
- Java基于Swing實(shí)現(xiàn)的打獵射擊游戲代碼
- Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例
- 使用java swing實(shí)現(xiàn)qq登錄界面示例分享
- java swing編程入門代碼編寫(java編程入門)
- java swing標(biāo)準(zhǔn)對(duì)話框具體實(shí)現(xiàn)
- Java Swing 非常漂亮外觀Nimbus的使用方法實(shí)例
- 跟我學(xué)Java Swing之游戲設(shè)計(jì)(1)
- 跟我學(xué)Java Swing之游戲設(shè)計(jì)(2)
- java基于swing實(shí)現(xiàn)的連連看代碼
相關(guān)文章
基于Java的Spring框架來操作FreeMarker模板的示例
這篇文章主要介紹了基于Java的Spring框架來操作FreeMarker模板的示例,講到了用于進(jìn)行web模板文件的插值操作等例子,需要的朋友可以參考下2016-03-03Spring Boot Hazelcast Caching 使用和配置詳解
這篇文章主要介紹了Spring Boot Hazelcast Caching 使用和配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09Java8?Stream?collect(Collectors.toMap())的使用
這篇文章主要介紹了Java8?Stream?collect(Collectors.toMap())的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05最有價(jià)值的50道java面試題 適用于準(zhǔn)入職Java程序員
這篇文章主要為大家分享了最有價(jià)值的50道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下2016-05-05Java實(shí)現(xiàn)注冊登錄跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)注冊登錄跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn)
很多人在使用MyBatis的緩存后經(jīng)常會(huì)遇到MySQL分頁查詢的顯示問題,針對(duì)于此,這里我們就來詳解Java的MyBatis框架中的緩存與緩存的使用改進(jìn),首先來回顧一下MyBatis的緩存機(jī)制與執(zhí)行:2016-06-06Java實(shí)現(xiàn)簡單圖書借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03java實(shí)現(xiàn)時(shí)間與字符串之間轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)時(shí)間與字符串之間轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12