`

用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数据库(附工程压缩包)

    本项目涉及的知识点主要集中在使用Swing实现一个进度条,同时将Excel和TXT文本数据上传到MySQL数据库的过程。下面将对这些技术点进行详细阐述。 1. **Swing组件**: Swing是Java的图形用户界面(GUI)工具包,提供了...

    swing 下载文件时的进度条

    在Java Swing中实现下载文件时的进度条功能,可以为用户提供更好的交互体验,让他们了解文件下载的状态。这个功能通常涉及到线程处理、网络I/O以及Swing组件的更新。以下是一些关键知识点: 1. **Swing组件**: - ...

    Java Swing 进度条

    这篇博客可能详细介绍了如何在Java Swing中使用进度条以及相关组件。 首先,我们来看`ProgressBarUI`。UI(用户界面)在Java Swing中是可定制的,`ProgressBarUI`是进度条的外观和行为的实现。它是`javax.swing....

    Java Swing JProgressBar进度条的实现示例

    Java Swing JProgressBar进度条的实现示例 Java Swing 中的 JProgressBar 是一个非常有用的组件,用于显示某些任务的进度。下面将详细介绍 JProgressBar 的实现示例、常用构造方法、常用方法和代码实例。 概述 ---...

    swing不确定进度条

    在Java编程环境中,Swing库提供了...以上是关于"Swing不确定进度条"的知识点介绍,希望对你理解如何在Java Swing应用程序中使用不确定进度条有所帮助。在实际开发中,可以根据具体需求进行调整和优化,提升用户体验。

    Java实现显示进度条

    本示例主要使用了Swing库中的组件,Swing是Java中的一个用于创建图形用户界面的工具包,提供了丰富的UI组件,包括`JProgressBar`(进度条)。 #### 关键代码解析 下面我们将对这段代码进行逐行分析: 1. **导入...

    java swing拷贝文件进度条

    为了实现进度条,我们可以使用`java.nio.file.FileChannel`和`java.nio.ByteBuffer`来跟踪已拷贝的字节数,并结合Swing的`JProgressBar`组件来显示进度。以下是一个带有进度条的文件拷贝示例: ```java import ...

    java实现进度条.pdf

    在本例中,我们使用了JProgressBar来实现进度条,通过设置JProgressBar的最大值和当前值,可以实现进度条的动态更新。例如,在文件下载过程中,可以实时更新进度条的进度,以便用户可以了解当前下载进度。 三、Java...

    java实现进度条

    ### Java实现进度条:原理与代码详解 在软件开发中,进度条是用户界面中一个非常重要的组件,它能够直观地向用户展示任务的完成情况,提升用户体验。本篇文章将详细解析如何使用Java来实现一个功能完备且外观美观的...

    java实时读取日志+ java 实现进度条实现demo

    2. **Swing的JProgressBar**:在GUI环境中,`javax.swing.JProgressBar`是实现进度条的标准组件。可以通过设置最小值、最大值和当前值来调整进度条的状态。 3. **JavaFX的ProgressIndicator**:JavaFX提供了更丰富...

    java 圆形进度条实现

    在Swing中,虽然没有内置的圆形进度条,但可以使用`javax.swing.JComponent`和`java.awt.Graphics`类来自定义组件。基本思路与JavaFX类似,只是绘图API不同。 在压缩包`CircleProgressBar`中,可能包含了一个实现...

    进度条使用示例(含源代码)

    为了实现这样的进度条,我们需要使用多线程技术。多线程允许我们的程序同时执行多个任务,这里是一个简化的步骤: 1. **创建主线程**:这是应用程序的主要运行环境,负责处理用户交互和界面更新。 2. **创建子线程*...

    java多线程进度条实例

    这个实例提供了一个基础的进度条实现,但在实际应用中,可能需要考虑更多因素,如线程优先级、线程池的使用、异常处理、线程间的通信等。此外,如果是在图形用户界面环境下,还需要考虑UI更新的流畅性和用户体验。...

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

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

    java 进度条的实现

    1. **Swing和AWT库**:在Java中,我们通常使用Swing或AWT库来创建图形用户界面,这两个库提供了丰富的组件,包括JProgressBar,这就是我们实现进度条的主要工具。 2. **JProgressBar**:JProgressBar是Swing中的一...

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

    Java Swing组件实现进度监视功能示例是Java中基于Swing组件实现进度条显示功能的详细分析和示例,主要介绍了如何使用Java Swing组件来实现进度监视功能,包括创建进度对话框、模拟耗时任务、进度条显示、取消操作等...

    java多线程进度条

    本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...

Global site tag (gtag.js) - Google Analytics