国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java SwingWorkder使用實例

2019-11-26 15:32:01
字體:
來源:轉載
供稿:網友

首先考慮的就是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<Integer, int[]> sw = new SwingWorker<Integer, int[]>() {

            /** 執行操作 */
            @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<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("完了。 合計" + 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);
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 页游| 锦屏县| 社会| 金溪县| 昌宁县| 健康| 宝兴县| 沙田区| 阿巴嘎旗| 大余县| 望都县| 陵川县| 钦州市| 洪洞县| 扬州市| 年辖:市辖区| 盖州市| 长丰县| 东明县| 东丽区| 桐庐县| 新泰市| 荥阳市| 云龙县| 绥阳县| 喜德县| 建宁县| 镇康县| 广安市| 昭通市| 天台县| 博客| 兴海县| 绥化市| 澄城县| 尼木县| 当雄县| 阜宁县| 阜新| 武乡县| 芮城县|