Java建立JProgressBar
来源:互联网 发布:淘宝权重查询 编辑:程序博客网 时间:2024/06/10 14:34
转载自:http://www.cnblogs.com/youxin/archive/2012/04/20/2459557.html
设置JProgressbar主要有以下几个点:
jpb.setMaximum(100);//设置最大值
jpb.setMinimum(0);//设置最小值
jpb.setValue(0);//设置初始值
jpb.setStringPainted(true);//设置进度条上是否显示进度具体进度如50%
jpb.setPreferredSize(new Dimension(400,50));设置大小,注意不是setsize
还有就是他有一个ChangeListener事件,可以监听进度条的变化。
这是我再百度上看到的那个人得问题,和我的差不多。//如下程序,在运行的时候,本应该进度从0显示到9(每0.1秒进度加1)。//可是为什么结果是:按下“start”后,没反应,经过短暂的时候,直接//显示9?谁能告诉我其中的原因。import java.awt.*;import java.awt.event.*;import javax.swing.*;public class NewClass{ static JProgressBar jpb=null; static JButton jb=null; public static void main(String args[]) { JFrame frm=new JFrame(); Container contentPane=frm.getContentPane(); jpb=new JProgressBar(); jpb.setOrientation(JProgressBar.HORIZONTAL); jpb.setMaximum(100);jpb.setMinimum(0);jpb.setValue(0); jpb.setStringPainted(true); jpb.setPreferredSize(new Dimension(400,50)); contentPane.add(jpb,BorderLayout.CENTER); jb=new JButton("Start"); jb.addActionListener(new Change()); contentPane.add(jb,BorderLayout.SOUTH); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.pack(); frm.setVisible(true); } static class Change implements ActionListener { public void actionPerformed(ActionEvent e) { for(int i=1;i<10;i++) { try { Thread.sleep(100); jpb.setValue(i); }catch(InterruptedException ie){} } } }}
解决办法:
因为你的程序是单线程的。当你按下按钮的时候,程序就开始执行那个for循环,直到for循环结束为止,程序的控制权才会返回,这段时间内,程序的控制权都在for循环那里,而那里不会做任何事情,只是在不断的设置一个值,然后睡觉。你注意,这时候界面是死的,进度条根本得不到重新绘制的机会(界面重绘,按钮的响应,都是由同一个线程分发的事件,你现在按钮响应事件中写setValue会在事件队列中添加一个事件,但是你自己还没完成,后续的当然更不可能做了),甚至你可以发现你按下按钮后,按钮保持深色,这表明按钮根本没有弹起来。在做这种时间非常长的事件处理的时候,你要新开一个线程才可以。这样,actionPerformed只是新建了一个线程,他会迅速返回,那么后续的repaint事件也可以及时得到执行,GUI就不会死了~
正确代码:
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ProgressBar{ static JProgressBar jpb=null; static JButton jb=null; public static void main(String args[]) { JFrame frm=new JFrame(); Container contentPane=frm.getContentPane(); jpb=new JProgressBar(); jpb.setOrientation(JProgressBar.HORIZONTAL); jpb.setMaximum(1000);jpb.setMinimum(0);jpb.setValue(0); jpb.setStringPainted(true); jpb.setPreferredSize(new Dimension(400,10)); jpb.setBackground(Color.black); jpb.setForeground(Color.red); contentPane.add(jpb,BorderLayout.CENTER); jb=new JButton("Start"); jb.addActionListener(new Change()); contentPane.add(jb,BorderLayout.SOUTH); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.pack(); frm.setVisible(true); } static class Change implements ActionListener { public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { public void run() { for (int i = 900; i >=1; i--) { try { Thread.sleep(100); jpb.setValue(i); } catch (InterruptedException ie) { } } } }).start(); } }}
- Java建立JProgressBar
- java 进度条 JProgressBar
- java进度条JProgressBar使用方法
- java swing定制jprogressbar
- JProgressBar
- JProgressBar
- JProgressBar
- Java GUI之初见JProgressBar
- Java简单案例:JProgressBar与SwingWorker的配合实用
- Java Swing 之Timer配合JProgressBar的使用
- Java实现进度条JProgressBar设置颜色,变色进度条
- Jprogressbar 模式
- JProgressBar进度条
- JAVA SWING中给按钮添加监听器后JFrame界面JProgressBar不能动态更新问题
- 博为峰Java技术文章 ——JavaSE Swing 进度条组件JProgressBar
- 博为峰Java技术文章 ——JavaSE Swing 如何使用进度条组件JProgressBarⅡ
- JProgressBar 的基本用法
- Swing 进度条JProgressBar
- C# 托盘程序 实例 双击显示窗体,最小化到托盘
- Flex4概念: 外观、样式
- arm-linux工具的几种使用简单说明
- ubuntu 12.04网络
- 黑马程序员2012.6.27.22.39
- Java建立JProgressBar
- Java编程中“为了性能”尽量要做到的一些地方
- Shape详解 (GradientDrawable)(转载)
- Ubuntu的sudo与su命令使用与开启root帐户
- 掌控大局
- .网站用户行为分析:揭秘用户为什么放弃你的网站
- 黑马程序员_学习日记54_626三层项目(三层案例)
- 黑马程序员-内部类
- 一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)