`

用Swing实现进度条

阅读更多
package Assis;

import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

@SuppressWarnings("serial")
public class ProgressBarDemo2 extends JPanel implements ActionListener, PropertyChangeListener {

	private JProgressBar progressBar;
	private JButton startButton;
	private JTextArea taskOutput;
	private Task task;

	class Task extends SwingWorker<Void, Void> {
		/*
		 * Main task. Executed in background thread.
		 */
		@Override
		public Void doInBackground() {
			Random random = new Random();
			int progress = 0;
			// Initialize progress property.   
			setProgress(0);
			// Sleep for at least one second to simulate "startup".   
			try {
				Thread.sleep(1000 + random.nextInt(2000));
			} catch (InterruptedException ignore) {
			}
			while (progress < 100) {
				// Sleep for up to one second.   
				try {
					Thread.sleep(random.nextInt(1000));
				} catch (InterruptedException ignore) {
				}
				// Make random progress.   
				progress += random.nextInt(10);
				setProgress(Math.min(progress, 100));
			}
			return null;
		}

		/*
		 * Executed in event dispatch thread
		 */
		public void done() {
			Toolkit.getDefaultToolkit().beep();
			startButton.setEnabled(true);
			taskOutput.append("Done!\n");
		}
	}

	public ProgressBarDemo2() {
		super(new BorderLayout());

		// Create the demo's UI.   
		startButton = new JButton("Start");
		startButton.setActionCommand("start");
		startButton.addActionListener(this);

		progressBar = new JProgressBar(0, 100);
		progressBar.setValue(0);

		// Call setStringPainted now so that the progress bar height   
		// stays the same whether or not the string is shown.   
		//		progressBar.setStringPainted(true);

		taskOutput = new JTextArea(5, 20);
		taskOutput.setMargin(new Insets(5, 5, 5, 5));
		taskOutput.setEditable(false);

		JPanel panel = new JPanel();
		panel.add(startButton);
		panel.add(progressBar);

		add(panel, BorderLayout.PAGE_START);
		add(new JScrollPane(taskOutput), BorderLayout.CENTER);
		setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
	}

	/**
	 * Invoked when the user presses the start button.
	 */
	public void actionPerformed(ActionEvent evt) {
		progressBar.setIndeterminate(true);
		startButton.setEnabled(false);
		// Instances of javax.swing.SwingWorker are not reusuable, so   
		// we create new instances as needed.   
		task = new Task();
		task.addPropertyChangeListener(this);
		task.execute();
	}

	/**
	 * Invoked when task's progress property changes.
	 */
	public void propertyChange(PropertyChangeEvent evt) {
		if ("progress" == evt.getPropertyName()) {
			int progress = (Integer) evt.getNewValue();
			progressBar.setIndeterminate(false);
			progressBar.setValue(progress);
			taskOutput.append(String.format("Completed %d%% of task.\n", progress));
		}
	}

	/**
	 * Create the GUI and show it. As with all GUI code, this must run on the event-dispatching thread.
	 */
	private static void createAndShowGUI() {
		// Create and set up the window.   
		JFrame frame = new JFrame("ProgressBarDemo2");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Create and set up the content pane.   
		JComponent newContentPane = new ProgressBarDemo2();
		newContentPane.setOpaque(true); // content panes must be opaque   
		frame.setContentPane(newContentPane);

		// Display the window.   
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		// Schedule a job for the event-dispatching thread:   
		// creating and showing this application's GUI.   
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
}

 

分享到:
评论

相关推荐

    Swing 实现进度条将excel和txt文本上传到mysql数据库(附工程压缩包)

    NULL 博文链接:https://370371029-qq-com.iteye.com/blog/1602104

    Java Swing JProgressBar进度条的实现示例

    主要介绍了Java Swing JProgressBar进度条的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    swing不确定进度条

    不确定某个程序运行多久,用进度条来监测,如果进度条监测到运行结果结束了,就退出进度条,否则以一种不确定的状态等待。

    Java实现圆圈旋转效果,等待、加载、刷新、旋转进度条

    Java代码实现圆圈旋转效果,比如在线看电影缓存时的旋转圆圈,网页刷新时的旋转圆圈,等待时

    java 圆形进度条实现

    实现两个不同颜色的圆形进度条

    Java Swing组件实现进度监视功能示例

    主要介绍了Java Swing组件实现进度监视功能,结合完整实例形式详细分析了Java基于Swing组件实现进度条显示功能的具体操作技巧与相关注意事项,需要的朋友可以参考下

    java swing 实现的带启动界面的简易截图软件

    java swing 实现的带启动界面的简易截图软件,启动界面有进度条,可保存可粘贴到qq微信,简单实用

    基于JavaSwing组件实现的拼图小游戏源码+项目说明.zip

    主要运用GUI设计,使用awt的jar包来创建窗体,面板,标签、实现图片的交换 及其它们的窗口布局等,创建线程来控制进度条的进度及其显示,使用按钮监听 器来实现窗口打开和关闭、游戏的开始、暂停和关闭。 基于JavaSwing...

    java swing 苹果主题文件管理器

    基于java swing 开发的文件管理器: 采用苹果 ios 主题风格,支持环形进度条显示cpu利用率 GUI文件管理系统 1、实现文件夹创建、删除、进入。 2、实现当前文件夹下的内容罗列。 3、实现文件拷贝和文件夹拷贝...

    利用AWT和Swing实现Java应用程序图形界面课程设计报告

    该应用程序包括了简单的算术运算、字符串处理图片显示等功能,必须包含有按钮、编辑框...(1) 用AWT或者Swing实现,可以借助于Eclipse等集成开发环境; (2) 程序运行良好,界面清晰。 提高要求: 在界面中能实现简单动画

    JAVA文件下载(限速、进度条)

    http://blog.csdn.net/r3lish/article/details/51912543 进度条:78%[===================&gt; ]97.7K/s, will be finished in 75.59s 限速、文件网络地址、文件本地路径,均可在代码里修改。

    FTPUpload上传文件 进度条显示进度

    java FTP上传文件(进度条显示进度)

    java swing Demo完整版

    这里是我最近学习swing编程中用到的一些demo JTable CURD 事件绑定 进度条 线程处理等等demo,总之作为新手的你,看这个demo你可以学到很多。这里还采用了2-3中布局方式实现布局,由于项目其他保密性,这里只是一个...

    java swing版 文件网络传输

    大二课程设计是用swing做的一个java网络传输,支持大文件传输,局域网传输速率很快,可以和飞鸽相比!不过那个进度条有点问题,timer没有深入研究,实现的基本上就形同虚设了!

    Java中读取文件进度条的实现

     实现这个功能比较简单,用到的类有两个:ProgressMonitorInputStream(主要是整个类) 和 ProgressMonitor ,它们在javax.swing中  大体思路,你要首先知道整个文件的大小,和当前已经读取文件的大小,获得整个...

    Java+Swing+Mysql实现电子商城管理系统(源码+数据库+ppt)

    Java+Swing+Mysql实现电子商城管理系统 电子商城系统主要功能包括:用户注册、用户登录、用户查看商城商品、用户购买商品、用户查看购物车并且清空购物车、用户找回账户以及密码、管理员登录、管理员注册、管理员...

    java-socket

    使用Java实现了socket传输文件夹的功能,其中传输文件夹可以有进度条显示,二期可以选择传输的文件

    跟我学JavaSwing之游戏设计.doc

    Swi ng则完全不同了,Swing是用纯Java编写的,因此,使用Swing编写的界面能保证在所有 平台上有着同样的外观。这里还有一个窍门:在JDK中,为便于区别,所有Swing控件都以 大写字母J开头,比如说JButton(AWT 中对应的...

    AWT基础知识

    实际开发中使用AWT的情况非常少,但是我们仍然有必要学习AWT。主要原因如下: 1. Swing是在AWT基础上构建的,事件模型和一些支持类(形状、颜色、字体)都一样。掌握AWT有利于后面学习SWING. Eclipse不是swing开发的,...

    Puzzle-Game:基于JavaSwing组件的拼图游戏

    Puzzle-Game基于JavaSwing组件的拼图游戏主要运用GUI设计,使用awt的jar包来创建窗体,面板,标签、实现图片的交换 及其它们的窗口布局等,创建线程来控制进度条的进度及其显示,使用按钮监听 器来实现窗口打开和关闭、...

Global site tag (gtag.js) - Google Analytics