JProgressBar

package swing.progress;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

/*2015-7-6*/
public class ProgressBarTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new ProgressBarFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                frame.setLocationRelativeTo(null);

            }
        });
    }
}

class ProgressBarFrame extends JFrame {
    private static final long serialVersionUID = 1L;

    public static final int DEFAULT_WIDTH = 400;
    public static final int DEFAULT_HEIGHT = 200;

    private JButton startButton;
    private JProgressBar progressBar;
    private JCheckBox checkBox;
    private JTextArea textArea;
    private SimulatedActivity activity;

    public ProgressBarFrame() {
        setTitle("ProgressBarTest");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        textArea = new JTextArea();

        final int MAX = 1000;
        JPanel panel = new JPanel();
        startButton = new JButton("Start");
        progressBar = new JProgressBar(0, MAX);
        progressBar.setStringPainted(true);
        panel.add(startButton);
        panel.add(progressBar);

        checkBox = new JCheckBox("indeterminate");
        checkBox.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                progressBar.setIndeterminate(checkBox.isSelected());
                progressBar.setStringPainted(!progressBar.isIndeterminate());
            }
        });

        panel.add(checkBox);
        add(new JScrollPane(textArea), BorderLayout.CENTER);
        add(panel, BorderLayout.SOUTH);

        startButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                startButton.setEnabled(false);
                activity = new SimulatedActivity(MAX);
                activity.execute();
            }
        });

    }

    class SimulatedActivity extends SwingWorker<Void, Integer> {

        private int current;
        private int target;

        public SimulatedActivity(int target) {
            super();
            current = 0;
            this.target = target;
        }

        @Override
        protected Void doInBackground() throws Exception {
            while (current < target) {
                TimeUnit.SECONDS.sleep(1);
                current++;
                publish(current);
                System.out.println("publish:" + current);
            }
            return null;
        }

        // 异步地从 publish 方法接收数据块
        @Override
        protected void process(List<Integer> chunks) {
            System.out.println("process.Size:" + chunks.size());
            for (Integer chunk : chunks) {
                textArea.append(chunk + "\n");
                System.out.println("process:" + chunk);
                progressBar.setValue(chunk);
            }
        }

        @Override
        protected void done() {
            startButton.setEnabled(true);
        }

    }

}

print:

publish:1
process.Size:1
process:1
publish:2
process.Size:1
process:2
...
时间: 2024-10-25 22:08:27

JProgressBar的相关文章

第12章-Swing编程 --- 使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条

第12章-Swing编程 --- 使用JProgressBar.ProgressMonitor和BoundedRangeModel创建进度条 (一)创建进度条 使用JProgressBar,可以很方便的创建进度条,其步骤如下: (1)创建一个JProgressBar对象,创建该对象时也可以指定3个参数,用于设置进度条的排列方向(竖直和水平).进度条的最大值和最小值.也可以在创建该对象时不传入任何参数,而是在后面程序中修改这3个属性. 下面代码创建了JProgressBar对象 //创建一条垂直进

进度条控件JProgressBar的使用

----------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:TestList.java 工程结构目录如下: 在根面板 contentPane 的下方添加一个 JProgressBar, 可以在 value 属性中设定初始值,可以在 maximum 和 minimum 属性中设定最大值和最小值 如:value 为 10,maximum 为100,minimum 为 0 进度条的使用场景: 当程序执行某一项比较耗时的操作时,让进度条给用

JProgressBar进度条

核心在于线程操作 //source code import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JProgressBar; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener ; class ProcessBar extends Thread { p

Java Swing 之Timer配合JProgressBar的使用

Timer作为java开发中常用的一个定时工具,配合JProgressBar使用起来还真是方便,只需要调用timer.start()方法就能激活并运行,然后调用stop()方法便能停止,还可以再次通过restart()方法重新使其运行,下面就直接上代码吧: package UsefulKnowledge; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.

第14篇-JAVA GUI编程

第14篇-JAVA GUI编程 每篇一句 :道路一开始开辟的时候总是存在障碍的 初学心得: 原本下定决心才能开始的事情也变得理所当然 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ] 1.什么是界面 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 2.Java 基础类 JFC 的基本

Java多线程同步机制

Java的多线程同步机制和其他语言开发的是一样的,在当前线程中,遇到某个事件时,等待另一个线程运行结束或者另一个线程的事件,然后再决定如何处理. 本例来自书上的实例,精简了代码,调整了部分逻辑,使得看起来更加简洁明了.已经运行通过. 代码如下: package SwingExample; import java.awt.BorderLayout; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPro

使用Java高速实现进度条

基于有人问到如何做进度条,以下给个简单的做法: 主要是使用JProgressBar(Swing内置javax.swing.JProgressBar)和SwingWorker(Swing内置javax.swing.SwingWorker) 有人肯定会说,不是用线程做的吗?使用线程共享一个变量,确实能够.只是这样的方式不太优雅,当然,你能够再用线程封装也行.只是,SwingWorker已经帮我们封装好啦--使用现成的东西来做还是方便^_^ 先看效果: 以下看代码:非常easy,相信各位大大肯定是懂的

java 文件及文件夹拷贝

View.java package com.liang; import java.awt.Color; import java.awt.Dimension; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBa

Java和C#基本类库的区别

java.lang java .net Boolean System.Boolean Byte System. Byte Character System.Char Class System.Type Double System.Double Float System.Single Integer System.Int32 Long System.Int64 Math System.Math Object System.Object Process System. Diagnostics .Pr