网上提到进度条,总是提到多线程,然后把多线程加到程序里面,更有甚者不管什么样的功能都把定时器加上,把程序写得那叫一个晦涩难懂。本来在swing里面的多线程就是不安全的,不太清楚进度条使用的人看着多线程在进度条上的使用,多少感觉很困难。其实实现一个进度条是极其的简单。下面来个例子你就会明白:
第一:一个进度条的代码:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import org.jdesktop.layout.GroupLayout;
import org.jdesktop.layout.LayoutStyle;
public class ProgressPane extends JPanel {
public JLabel label;
public JProgressBar progressBar;
/**
* Create the panel
*/
public ProgressPane() {
super();
setLayout(new GridBagLayout());
setSize(394, 33);
progressBar = new JProgressBar(0,100);
progressBar.setStringPainted(true);
final GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.weightx = 1.0;
gridBagConstraints.ipady = 10;
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipadx = 75;
gridBagConstraints.insets = new Insets(4, 0, 0, 0);
add(progressBar, gridBagConstraints);
label = new JLabel();
final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();
gridBagConstraints_1.gridx = 1;
gridBagConstraints_1.gridy = 0;
gridBagConstraints_1.ipadx = 54;
gridBagConstraints_1.insets = new Insets(0, 12, 10, 0);
add(label, gridBagConstraints_1);
label.setText("正常状态");
//
}
}
第二:要打开的一个界面测试类
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JProgressBar;
import javax.swing.JDialog;
import javax.swing.JPanel;
public class TTTT extends JDialog {
/**
* Create the dialog
*/
public TTTT(JProgressBar progressBar) {
super();
setTitle("天津英诺");
setBounds(100, 100, 500, 375);
for(int i=0;i<100;i++){
progressBar.setValue(i);
progressBar.setString("正在打开--天津英诺界面。。。 "+i+"%");
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
final JCheckBox checkBox = new JCheckBox();
checkBox.setText("New JCheckBox");
panel.add(checkBox);
final JButton button = new JButton();
button.setText("New JButton");
panel.add(button);
//
}
}
可以看到上面,没有什么多线程的东西,就在打开的界面里面有一个对传过来的进度条对象进行设置它的值,为了显示需要,每次更新值都暂停200毫秒即:Thread.sleep(200);
第三:一个主程序测试程序:
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.lang.reflect.InvocationTargetException;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
//import .ProgressBarTask;
public class ProgressFrame extends JFrame {
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
ProgressFrame frame = new ProgressFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
private ProgressPane progresspane;
public ProgressFrame() {
super();
setTitle("进度条事例");
setBounds(100, 100, 500, 375);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
progresspane = new ProgressPane();
final JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
getContentPane().add(panel, BorderLayout.CENTER);
final JButton button = new JButton();
button.setText("点击");
final GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridy = 0;
gridBagConstraints.gridx = 0;
panel.add(button, gridBagConstraints);
getContentPane().add(progresspane, BorderLayout.SOUTH);
//事件监听
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
Thread thread = new Thread(new Runnable(){//进度条的多线程就在这一点
public void run() {
// 点击按钮要打开的界面
TTTT ts = new TTTT(progresspane.progressBar);
ts.pack();
ts.setVisible(true);
progresspane.progressBar.setValue(0);//界面打开之后要把进度条归到0
}
});
thread.start();//启动这个线程 就足够了
}
});
}
}
进度条的使用其实很简单吧。主要是因为swing界面是单线程的,你只需另起一个线程,就可以使用进度条了,要不然的话,单线程上更新进度条的值,进度条是没反应的。
分享到:
相关推荐
在Swing中,进度条(JProgressBar)是其中一个非常实用的组件,通常用于显示一个任务的进度,让用户了解程序执行的状态。这篇博客可能详细介绍了如何在Java Swing中使用进度条以及相关组件。 首先,我们来看`...
Swing进度条(JProgressBar)是Java Swing库中的一个组件,用于在用户界面中显示某个操作的进度。它常用于长时间运行的任务,如文件下载、数据处理或网络通信,为用户提供反馈,让他们知道程序仍在运行并且可以预期...
本示例主要使用了Swing库中的组件,Swing是Java中的一个用于创建图形用户界面的工具包,提供了丰富的UI组件,包括`JProgressBar`(进度条)。 #### 关键代码解析 下面我们将对这段代码进行逐行分析: 1. **导入...
本文将详细介绍如何使用Java Swing库来开发一个简单的页面进度条。 #### 二、Java Swing简介 Java Swing是Java平台的一部分,它为创建图形用户界面(GUI)提供了一套丰富的API。与AWT不同的是,Swing组件是由纯Java...
在Java编程中,创建一个带有进度条的文件拷贝程序是一项实用技能,尤其对于那些希望增强用户界面体验的开发者来说。下面将详细讲解这个“JAVA 带进度条的文件拷贝程序”的核心知识点。 首先,我们需要理解的是,...
Java是当今最流行的编程语言之一,在界面设计和图形用户界面(GUI)开发中,进度条是常见的控件之一。下面将对Java实现进度条的相关知识点进行详细讲解。 一、Java GUI编程 Java GUI(Graphical User Interface)...
本实例将探讨如何利用Java实现一个具有进度条显示功能的多线程应用。进度条通常用于可视化地表示某个任务的完成程度,这对于长时间运行的操作如文件下载、上传或大型计算来说非常有用。 首先,我们要理解Java中的...
这篇博客“java swing拷贝文件进度条”可能讲述的就是如何在Java Swing应用程序中创建一个具有文件拷贝功能,并且伴有进度条展示拷贝进度的组件。 在Java中,我们可以使用java.io包中的FileInputStream和...
在Java编程中,实现一个圆形进度条是一种常见的需求,特别是在GUI(图形用户界面)应用或者移动应用开发中。本篇文章将深入探讨如何在Java中创建一个具有两种不同颜色的圆形进度条。 首先,我们需要理解圆形进度条...
标题中的“swing不确定进度条”指的是在Swing中利用JProgressBar类的不确定模式来构建一个表示任务正在进行但无法确定剩余时间的进度条。这种模式下,进度条将以一种连续循环的方式移动,直到后台任务完成。 **一、...
在Java编程中,进度条是一种常见的用户界面元素,它用于可视化地表示某个任务或操作的进度,例如文件上传、下载或处理。实现Java进度条主要涉及GUI(图形用户界面)和多线程技术。以下是对Java进度条实现的详细解释...
在Java编程环境中,FTP(File Transfer Protocol)上传文件并实现进度条显示是一个常见的需求,尤其在用户界面设计中。下面将详细讲解如何使用Java的Swing库创建一个带有进度条的FTP文件上传功能。 首先,我们需要...
1. **ProgressMonitor**:是 Swing 中的一个类,用于创建一个带有进度条的弹出窗口,可以用来显示任务的状态。它支持取消操作,即用户可以通过点击取消按钮来终止任务。 2. **Runnable**:是 Java 中定义的一种接口...
在这个"java Swing 文件批量上传 DEMO 源代码"中,我们关注的核心是利用Swing构建一个用户界面,实现文件和文件夹的批量上传功能。这涉及到多个Java Swing组件、事件处理以及文件I/O操作。 首先,Swing 提供了诸如...
1. **使用FileInputStream和BufferedReader**:创建一个`FileInputStream`对象来打开日志文件,然后用`BufferedReader`进行读取。通过循环读取每一行,一旦有新的日志被写入,就可以立即显示。这种方法简单但可能不...
在Java编程中,进度条是一种常见用户界面组件,它用于可视化地表示某个任务或操作的进度,例如文件上传、下载或计算过程。本教程将基于提供的`TestMyProgressBar.java`和`MyProgressBar.java`文件,讲解如何使用Java...
这篇博客文章“swing进度条demo”很可能是分享了一个关于如何在Java应用中使用Swing JProgressBar的实例代码。 在Swing中,JProgressBar可以有两种模式:连续(Continuous)和离散(Discrete)。连续模式通常用于...
Java进度条是用户界面(UI)设计中常见的一种元素,用于提供给用户关于长时间运行任务的进度反馈。在Java编程中,我们可以使用Java Swing或JavaFX库来创建进度条。以下将详细介绍如何在Java中实现进度条功能,以及...
在Java编程中,进度条(Progress Bar)是一种常见的用户界面元素,用于表示任务的执行进度。它可以增强用户体验,因为用户可以直观地看到程序执行的状态,尤其是处理耗时操作时。本资源包含三个不同版本的Java进度条...
在实现下载进度条时,我们可能需要创建一个后台线程来执行文件下载,以免阻塞用户界面。Java的多线程机制,如`java.lang.Thread`或`java.util.concurrent`包中的工具,可以派上用场。为了确保进度条与实际下载进度...