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

article/2025/11/3 15:31:48

目录

一、进度条的介绍

二、创建进度条

三、简单案例

 四、子线程创建进度条

(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++;}}}
}


http://chatgpt.dhexx.cn/article/G6tOpwIP.shtml

相关文章

Java图形化界面编程超详细知识点(7)——进度条

目录 4 JProgressBar、ProgressMonitor、BoundedRangeModel实现进度条 4.1 创建进度条 4 JProgressBar、ProgressMonitor、BoundedRangeModel实现进度条 进度条是图形界面中广泛使用的GUI组件&#xff0c;当复制一个较大的文件时&#xff0c;操作系统会显示一个进度条&#…

Java制作进度条

【效果图】 【描述】 进度条宽度保持和窗口宽度一致&#xff0c;进度最小值为0&#xff0c;最大值为100&#xff0c;每100毫秒进度值1&#xff0c;进度条中间显示进度百分比 【代码】 package test;import java.awt.*; import java.awt.event.*;import javax.swing.*;public…

QT:QGraphicsScene与QGraphicsView使用render()函数渲染图片

render()函数看官方文档&#xff0c;会有很多不懂得地方&#xff0c;以下为实践出来的效果。 当我们想要用QPaint() 绘制我们在QGraphicsView看到的部分时&#xff0c;不仅要绘制正确的图片大小&#xff0c;还需要使用 render() 渲染正确的大小。当我们只想要绘制坐标系中矩形…

Qt图形特效:QGraphicsOpacityEffect

一、描述 不透明度效果使源具有不透明度。该效果对于使源半透明非常有用&#xff0c;类似于淡入/淡出序列。可以使用setOpacity()函数修改不透明度。 二、属性成员 1、opacity : qreal。此属性保存不透明度。该值应在0.0到1.0的范围内&#xff0c;其中0.0是完全透明的&#…

图形视图(02):【类】QGraphicsScene [官翻]

文章目录 详述事件处理和传播 公共类型enum ItemIndexMethodenum SceneLayer 属性backgroundBrush: QBrushbspTreeDepth: intfocusOnTouch: boolfont: QFontforegroundBrush: QBrushitemIndexMethod: ItemIndexMethodminimumRenderSize: qrealpalette: QPalette**sceneRect**: …

Qt中使用QGraphicsScene重写drawBackGround绘制背景

Qt中使用QGraphicsScene重写drawBackGround绘制背景 需求解释 我是想这学习Qt的界面设计&#xff0c;希望能够对界面背景进行优化然后使用Qt的界面与图形画背景网格。首先查资料 通过查找博客发现很简单&#xff0c;就是新建一个类继承于QGraphicsScene&#xff0c;于是我就…

图形视图框架QGraphicsScene(场景,概念)

QGraphicsScene 该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用&#xff0c;用于在 2D 表面上可视化图形项目&#xff0c;例如线条、矩形、文本甚至自定义项目。 QGraphicsScene具有的功能&#xff1a; 提供用管理大量数据项的高速接口传播事件到每一个图形项…

qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

应大家的要求&#xff0c;还是把完整的工程文件贴出来&#xff0c;大家省点事&#xff1a;http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看运行效果&#xff0c;我用的群创7寸屏&#xff0c;主机是mini2440&#xff0c;分辨率是800*480&#xff0c;程序写比较粗糙…

Qt QGraphicsScene、QGraphicsView类实现仪表盘

Qt QGraphicsScene、QGraphicsView类实现仪表盘 【1】UI界面设计【2】效果【3】QGraphicsScene简介【4】QGraphicsEllipseItem简介【5】QGraphicsPolygonItem简介【6】QGraphicsLineItem简介【7】QGraphicsView简介【8】仪表源码头文件源码 【1】UI界面设计 【2】效果 【3】QGr…

qt QGraphicsScene 简单例子

坐标 graphicsView是Widget这个界面的子控件&#xff0c; 他的位置是左上角坐标为&#xff08;30,30&#xff09; 他的宽度为431&#xff0c;高度为431. 如果在graphicsView 这个子控件中&#xff0c; 继续加入 子控件A&#xff0c;由于graphicsView比较特殊。 根据它的align…

QGraphicsScene设置SceneRect

简要说明 QGraphicsScene场景区域&#xff0c;可在构造QGraphicsScene对象时设定&#xff0c;也可通过函数setSceneRect设定。QGraphicsScene场景区域中坐标原点的位置&#xff0c;会影响到图形项的坐标设定&#xff0c;进而影响图形项在场景中的显示位置。以将图片显示在中心…

QT QGraphicsScene / QGraphicsView中 sceneRect 使用详细说明

接触QT不久&#xff0c;发现QT的Graphics View框架坐标使用和平常不一样&#xff0c;尤其sceneRect的作用。 官方文档关于这部分介绍真是蛋疼&#xff0c;网上说的也寥寥。没法自己研究了一下&#xff0c;其实这块内容QT设计的很方便&#xff0c;只是文档讲解的太烂&#xff0c…

【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用

GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用 前言实验目的重构GraphicsView类新建GraphicsView、QGraphicsScene层绘制Item图形控件绘制圆形绘制矩形绘制三角形绘制文字绘制直线 组合、打散、前置和后置组合打散控件前置控件后置 绑定功能事件总结 前言 对于绘…

Qt 绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

Graphics View提供了一个界面&#xff0c;它既可以管理大数量的定制2D graphical items&#xff0c;又可与它们交互&#xff0c;有一个view widget可以把这些项绘制出来&#xff0c;并支持旋转与缩放。这个柜架也包含一个事件传播结构&#xff0c;对于在scene中的这些items,它具…

PyQt5:QGraphicsScene入门一:基本介绍、场景定义、添加元素

为什么80%的码农都做不了架构师?>>> 简介说明: 这个QGraphicsScene类用于在场景中操作大量的2D图形元素,这个类是作为一个容器QGraphicsItems存在的,它是连同QGraphicsView用于可视化的二维表面的图形项目,如直线,矩形,文本,甚至定制物品;还可以有效地…

QGraphicsView,QGraphicsScene和QGraphicsItem

图形视图框架提供了一个基于图形项的模型视图编程方法&#xff0c;主要由场景、视图和图形项三部分组成&#xff0c;这三部分分别由QGraphicsScene、QGraphicsView和QGraphicsItem这三个类来表示。 场景QGraphicsScene QGraphicsScene类提供绘图场景&#xff08;Scene&#…

Qt图形视图框架:QGraphicsScene详解

一、描述 1、场景提供了一个用于管理大量2D图形项的平面。该类充当图形项的容器。 它与视图一起用于可视化2D曲面上的图形图形项。 2、场景没有自己的视觉外观&#xff0c;只负责管理图形项。 3、场景的最大优势之一就是其快速有效地定位图形项的能力。即使场景中有数百万个…

Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/117660217 长期持续带来更多项目与技术分享&#xff0c;咨询请加QQ:21497936、微信&#xff1a;yangsir198808 红胖子(红模仿)的博文大全&#xff1…

TLS、SSL原理解析

TLS、SSL https协议就是建立在TLS、SSL之上的。

SSL证书原理讲解

SSL证书原理讲解 - 2240930501 - 博客园一直以来都对数字证书的签发&#xff0c;以及信任等事情一知半解。总算有个闲适的周末来总结和深入一下相关的知识。 CA: CA(Certificate Authority)是证书的签发机构&#xff0c;它是负责管理和签发证书的https://www.cnblogs.com/dingl…