失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java图形化界面---进度条

Java图形化界面---进度条

时间:2024-03-20 03:22:35

相关推荐

Java图形化界面---进度条

目录

一、进度条的介绍

二、创建进度条

三、简单案例

四、子线程创建进度条

(1)为什么要使用子线程创建进度条

(2)子线程创建进度条的代码

五、创建进度对话框

(1)如何创建进度对话框

(2)案例

一、进度条的介绍

进度条是图形界面中广泛使用的GUI组件,当复制一个较大的文件时,操作系统会显示一个进度条,用于标识复制操作完成的比例;当启动Eclipse等程序时,因为需要加载较多的资源,故而启动速度较慢,程序也会在启动过程中显示一个进度条,用以表示该软件启动完成的比例......

二、创建进度条

(1)创建JProgressBar对象

JProgressBar(int o,int mi,int ma)

o:方向

mi:最小值

ma:最大

(2)设置属性

setBorderPainted(boolean b)设置进度条是否有边框

setIndeterminate(boolean b)设置当前进度条是不是进度不确定的进度条,如果是,则将看到一个滑块在进度条中左右移动

setStringPainted(boolean b)设置进度条是否显示当前完成的百分比

(3)获取和设置当前进度条的进度状态

setValue(int n) 设置当前进度值

double getPerecentComplete() 获取进度条的完成百分比

String getString() 返回进度字符串的当前值

三、简单案例

制作如图所示界面:

public class exer{JFrame s=new JFrame("程序练习");JCheckBox b1=new JCheckBox("不确定进度");JCheckBox b2=new JCheckBox("不绘制边框");JProgressBar bar=new JProgressBar(JProgressBar.HORIZONTAL,0,100);public void init(){b1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取是否点击了不确定进度boolean b=b1.isSelected();//设置当前进度条不确定进度bar.setIndeterminate(b);//设置是否显示当前百分比bar.setStringPainted(!b);}});b2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取是否选中复选框boolean b=b2.isSelected();bar.setBorderPainted(!b);}});Box box1=Box.createVerticalBox();box1.add(b1);box1.add(b2);Box box2=Box.createHorizontalBox();box2.add(box1);box2.add(bar);s.add(box2);//开始设置默认属性bar.setBorderPainted(true);bar.setStringPainted(true);s.setDefaultCloseOperation(3);s.pack();s.setVisible(true);//通过循环模拟进度条for(int i=0;i<=100;i++){bar.setValue(i);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}}

四、子线程创建进度条

(1)为什么要使用子线程创建进度条

创建进度条时假如你使用的如果是主线程的话,那么其他事情你都不能做,只能等着进度条结束后才可以做其他的事,这样子用户体验性极差。所有进度条的创建我们通常使用子线程,这样子的用户体验性更好一点。

(2)子线程创建进度条的代码

public class exer{JFrame s=new JFrame("程序练习");JCheckBox b1=new JCheckBox("不确定进度");JCheckBox b2=new JCheckBox("不绘制边框");JProgressBar bar=new JProgressBar(JProgressBar.HORIZONTAL,0,100);public void init(){b1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取是否点击了不确定进度boolean b=b1.isSelected();//设置当前进度条不确定进度bar.setIndeterminate(b);//设置是否显示当前百分比bar.setStringPainted(!b);}});b2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取是否选中复选框boolean b=b2.isSelected();bar.setBorderPainted(!b);}});Box box1=Box.createVerticalBox();box1.add(b1);box1.add(b2);Box box2=Box.createHorizontalBox();box2.add(box1);box2.add(bar);s.add(box2);//开始设置默认属性bar.setBorderPainted(true);bar.setStringPainted(true);s.setDefaultCloseOperation(3);s.pack();s.setVisible(true);//开启子线程sim ss=new sim(bar.getMaximum());new Thread(ss).start();//设置一个定时任务Timer ti=new Timer(200, new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//读取线程任务对象的当前完成量,设置给进度条int current=ss.getCurrent();bar.setValue(current);}});ti.start();bar.addChangeListener(new ChangeListener() {@Overridepublic void stateChanged(ChangeEvent e) {if(bar.getValue()==ss.getAmount()){ti.stop();}}});}private class sim implements Runnable{//任务总量private int amount;//记录当前完成的任务量private volatile int current;public sim(int amount){this.amount=amount;}public int getAmount(){return amount;}public void setAmount(int amount){this.amount=amount;}public void setCurrent(int current){this.current=current;}public int getCurrent(){return current;}@Overridepublic void run() {while(current<100){try {Thread.currentThread().sleep(50);} catch (InterruptedException e) {e.printStackTrace();}current++;}}}}

五、创建进度对话框

(1)如何创建进度对话框

ProgressMonitor的用法与JProgressBar的用法基本相似,只是ProgressMonitor可以直接创建一个进度对话框,它提供了下面的构造器完成对话框得到创建

public ProgressMonitor(Component p,Object m,String n,int mi,int ma)

p:对话框的父组件,这个父组件也可以不存在。

m:对话框的描述信息

n:进度条的提示信息

mi:进度条的最小值

ma:进度条的最大值

使用ProgressMonitor创建的对话框里包含的进度条是非常固定的,程序甚至不能设置进度条是否包含便边框(总是包含边框),不能设置进度不确定,不能改变进度条的方向(总是水平的)

(2)案例

制作如图所示界面

public class exer{Timer t;public void init(){ProgressMonitor monitor=new ProgressMonitor(null,"等待任务完成","已完成",0,100);sim ss=new sim(100);new Thread(ss).start();t=new Timer(200, new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//读取当前进度,设置进度条monitor.setProgress(ss.current);//判断用户是否点击了取消按钮if (monitor.isCanceled()==true){t.stop();monitor.close();System.exit(0);}}});t.start();}private class sim implements Runnable{private volatile int current=0;private int amount;public sim(int amount){this.amount=amount;}public void setCurrent(int current){this.current=current;}public void setAmount(int amount){this.amount=amount;}public int getAmount(){return amount;}public int getCurrent(){return current;}@Overridepublic void run() {while(current<100){try {Thread.currentThread().sleep(200);} catch (InterruptedException e) {e.printStackTrace();}current++;}}}}

如果觉得《Java图形化界面---进度条》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。