第12章-Swing编程 --- 使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条
2020-12-13 02:48
标签:style class blog code java http 第12章-Swing编程 ---
使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条 (一)创建进度条 使用JProgressBar,可以很方便的创建进度条,其步骤如下: (1)创建一个JProgressBar对象,创建该对象时也可以指定3个参数,用于设置进度条的排列方向(竖直和水平)、进度条的最大值和最小值。也可以在创建该对象时不传入任何参数,而是在后面程序中修改这3个属性。 下面代码创建了JProgressBar对象 (2)调用该对象的常用方法设置进度条的普通属性。JProgressBar除了提供设置排列方向、最大值、最小值的setter和getter方法之外,还提供了如下3个方法: 1. setBorderPainted(boolean
b):设置该进度条是否使用边框。 2. setIndeterminate(boolean
newValue):设置该进度条是否是进度不确定的进度条,如果指定一个进度条的进度不确定,将看到一个滑块在进度条中左右移动。 3. setStringPainted(boolean
newValue):设置是否在进度条中显示完成百分比 。 (3)当程序中工作进度改变时,调用JProgressBar对象的setValue()方法。 下面举例示范一个简单的进度条例子: 下面举例,使用一个计时器来不断取得目标程序的完成情况,并根据其完成情况来修改进度条的value属性。 (二)创建进度条对话框 ProgressMonitor创建进度条对话框。 提供了如下构造函数: ProgressMonitor(Component
parentComponent,Object message,String note,int min,int
max):该构造器中的paraentComponent参数用于设置该进度条对话框的父组件,message用于设置进度条对话框的描述信息,note用于设置该进度条对话框的提示文本,min和max用于设置该对话所包含的进度条的最小值和最大值。 下面程序示范了 ProgressMonitor的使用: 第12章-Swing编程 ---
使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条,搜素材,soscw.com 第12章-Swing编程 ---
使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条 标签:style class blog code java http 原文地址:http://www.cnblogs.com/xinhuaxuan/p/3783482.html//创建一条垂直进度条
JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL);
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
public class JProgressBarTest
{
private JFrame frame = new JFrame("测试进度条");
//创建一个垂直进度条
private JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL);
private JCheckBox indeterminate = new JCheckBox("不确定进度");
private JCheckBox noBorder = new JCheckBox("不绘制边框");
public void init()
{
Box box = new Box(BoxLayout.Y_AXIS);
box.add(indeterminate);
box.add(noBorder);
frame.setLayout(new FlowLayout());
frame.add(box);
//把进度条件添加到JFrame窗口中
frame.add(bar);
//设置进度条的最大值和最小值
bar.setMinimum(0);
bar.setMaximum(100);
//设置在进度条中绘制完成百分比
bar.setStringPainted(true);
noBorder.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0)
{
//根据选择框决定是否绘制 进度条的边框
bar.setBorderPainted(!noBorder.isSelected());
}
});
indeterminate.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
//设置该进度条的进度是否确定
bar.setIndeterminate(indeterminate.isSelected());
bar.setStringPainted(!indeterminate.isSelected());
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
//采用循环方式来不断改变进度条的完成进度
for(int i = 0;i )
{
//改变进度条的完成进度
bar.setValue(i);
try
{
//程序暂停0.3秒
Thread.sleep(300);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
new JProgressBarTest().init();
}
}
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.Timer;
public class JProgressBarTest2
{
private JFrame frame = new JFrame("测试进度条");
//创建一条垂直进度条
private JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL);
private JCheckBox indeterminate = new JCheckBox("不确定进度");
private JCheckBox noBorder = new JCheckBox("不绘制边框");
public void init()
{
Box box = new Box(BoxLayout.Y_AXIS);
box.add(indeterminate);
box.add(noBorder);
frame.setLayout(new FlowLayout());
frame.add(box);
//把进度条件添加到JFrame窗口中
frame.add(bar);
//设置在进度条中绘制完成百分比
bar.setStringPainted(true);
noBorder.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
//根据选择框决定是否绘制 进度条的边框
bar.setBorderPainted(!noBorder.isSelected());
}
});
final SimulateActivity target = new SimulateActivity(1000);
//以启动一条线程的方式来执行一个耗时的任务
new Thread(target).start();
//设置进度条的最大值和最小值
bar.setMinimum(0);
bar.setMaximum(target.getAmount());
Timer timer = new Timer(300,new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
//以任务的当前完成量设置进度条的value属性
bar.setValue(target.getCurrent());
}
});
timer.start();
indeterminate.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
//设置该进度条的进度是否确定
bar.setIndeterminate(indeterminate.isSelected());
bar.setStringPainted(!indeterminate.isSelected());
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args)
{
new JProgressBarTest2().init();
}
}
//模拟一个耗时的任务
class SimulateActivity implements Runnable
{
//任务的当前完成量
private volatile int current;
//总任务量
private int amount;
/**
* 功能:
* 带参数构造函数
* @param amount
*/
public SimulateActivity(int amount)
{
current = 0;
this.amount = amount;
}
public int getCurrent()
{
return current;
}
public int getAmount()
{
return amount;
}
//run方法代表不断完成任务的过程
@Override
public void run()
{
while(current amount)
{
try
{
Thread.sleep(50);
}
catch(Exception e)
{
e.printStackTrace();
}
current++;
}
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ProgressMonitor;
import javax.swing.Timer;
public class ProgressMonitorTest
{
private Timer timer;
public void init()
{
final SimulateActivity1 target = new SimulateActivity1(1000);
//以启动一条线程的方式来执行一个耗时的任务
final Thread targetThread = new Thread(target);
targetThread.start();
final ProgressMonitor dialog = new ProgressMonitor(null,"等待任务完成","已完成",0,target.getAmount());
timer = new Timer(300,new ActionListener(){
@Override
public void actionPerformed(ActionEvent e)
{
//以任务的当前完成量设置进度对话框的完成比例
dialog.setProgress(target.getCurrent());
//如果用户单击了进度对话框中的"取消"按钮
if(dialog.isCanceled())
{
//停止计时器
timer.stop();
//中断任务的执行
targetThread.interrupt();
//系统退出
System.exit(0);
}
}
});
timer.start();
}
public static void main(String[] args)
{
new ProgressMonitorTest().init();
}
}
//模拟一个耗时的任务
class SimulateActivity1 implements Runnable
{
//任务的当前完成量
private volatile int current;
//总任务量
private int amount;
/**
* 功能:
* 带参数构造函数
* @param amount
*/
public SimulateActivity1(int amount)
{
current = 0;
this.amount = amount;
}
public int getCurrent()
{
return current;
}
public int getAmount()
{
return amount;
}
//run方法代表不断完成任务的过程
@Override
public void run()
{
while(current amount)
{
try
{
Thread.sleep(50);
}
catch(Exception e)
{
e.printStackTrace();
}
current++;
}
}
}
文章标题:第12章-Swing编程 --- 使用JProgressBar、ProgressMonitor和BoundedRangeModel创建进度条
文章链接:http://soscw.com/essay/26344.html