12.7Swing控件5 JProgressBar

news2025/6/9 15:15:33

Swing 进度条(JProgressBar)是用于可视化展示任务完成进度的组件,通常用于显示长时间运行任务的完成百分比。以下是关于 Swing 进度条的详细介绍:

1. 基本概念与用途

  • 作用:直观展示任务完成进度,避免用户在等待时感到焦虑。
  • 常见场景:文件下载、数据导入、批量处理等耗时操作。

2. 核心类与方法

Swing 进度条的核心类是 JProgressBar,它继承自 JComponent,主要方法包括:

  • 构造方法

    JProgressBar()                          // 创建默认进度条(0-100)
    JProgressBar(int min, int max)         // 指定最小值和最大值
    JProgressBar(int orientation, int min, int max)  // 指定方向(HORIZONTAL 或 VERTICAL)
    
  • 进度控制

    setValue(int n)      // 设置当前进度值
    getValue()           // 获取当前进度值
    setMinimum(int min)  // 设置最小值
    setMaximum(int max)  // 设置最大值
    setIndeterminate(boolean b)  // 设置为不确定模式(任务时长未知时使用)
    
  • 外观设置

    setString(String s)       // 设置进度条上的文本
    setStringPainted(boolean b)  // 是否显示文本
    setForeground(Color c)    // 设置进度条颜色
    setBackground(Color c)    // 设置背景色
    

主要属性和方法

  • setValue(int n):设置当前进度值。
  • setMinimum(int min) 和 setMaximum(int max):设置进度条的最小值和最大值。
  • setStringPainted(boolean b):如果为 true,则会在进度条上显示当前进度值作为文本。
  • setOrientation(int orientation):改变进度条的方向,可以是 JProgressBar.HORIZONTAL 或 JProgressBar.VERTICAL

 

3. 简单示例:文件下载进度条

下面是一个模拟文件下载进度的示例代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ProgressBarExample {
    public static void main(String[] args) {
        // 创建 JFrame
        JFrame frame = new JFrame("文件下载进度");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 200);
        frame.setLocationRelativeTo(null);

        // 创建进度条(最小值0,最大值100)
        JProgressBar progressBar = new JProgressBar(0, 100);
        progressBar.setStringPainted(true);  // 显示进度百分比文本
        progressBar.setPreferredSize(new Dimension(300, 30));

        // 创建开始按钮
        JButton startButton = new JButton("开始下载");
        startButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 禁用按钮,防止重复点击
                startButton.setEnabled(false);
                
                // 创建并启动后台任务
                SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
                    @Override
                    protected Void doInBackground() throws Exception {
                        // 模拟下载进度(0-100)
                        for (int i = 0; i <= 100; i++) {
                            // 更新进度条
                            progressBar.setValue(i);
                            
                            // 模拟耗时操作
                            Thread.sleep(100);
                        }
                        return null;
                    }
                    
                    @Override
                    protected void done() {
                        // 任务完成后恢复按钮状态
                        startButton.setEnabled(true);
                        progressBar.setString("下载完成!");
                    }
                };
                
                worker.execute();  // 执行后台任务
            }
        });

        // 添加组件到面板
        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 50));
        panel.add(progressBar);
        panel.add(startButton);

        frame.add(panel);
        frame.setVisible(true);
    }
}

4. 不确定模式(Indeterminate Mode)

当任务时长无法预估时,可以使用不确定模式:

// 创建不确定模式的进度条
JProgressBar indeterminateBar = new JProgressBar();
indeterminateBar.setIndeterminate(true);  // 开启不确定模式
indeterminateBar.setString("加载中...");
indeterminateBar.setStringPainted(true);

不确定模式下,进度条会显示一个平滑移动的动画,提示用户 “任务正在进行中”。

5. 自定义外观

可以通过以下方式自定义进度条的外观:

// 设置进度条颜色
progressBar.setForeground(Color.GREEN);  // 进度条颜色
progressBar.setBackground(Color.LIGHT_GRAY);  // 背景色

// 设置字体和文本
progressBar.setFont(new Font("Arial", Font.BOLD, 12));
progressBar.setString("处理中: " + progressBar.getValue() + "%");

// 设置垂直进度条
JProgressBar verticalBar = new JProgressBar(JProgressBar.VERTICAL, 0, 100);

6. 注意事项

  1. 线程安全:更新进度条的操作必须在 EDT(事件调度线程)中进行。通常使用 SwingWorker 或 invokeLater 来确保线程安全。
  2. 性能优化:频繁更新进度条可能影响界面响应性,建议设置合理的更新间隔(如每 1% 更新一次)。
  3. 异常处理:长时间运行的任务应包含异常处理逻辑,避免因错误导致进度条卡死。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2405510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hardware-Efficient Attention for Fast Decoding

TL;DR 2025 年普林斯顿大学提出的硬件友好 attention 设计&#xff0c;在 MQA/GQA 与 deepseek 提出的 MLA 基础之上继续优化&#xff0c;提出 Grouped-Tied Attention (GTA) 和 Grouped Latent Attention (GLA)&#xff0c;实现更高推理效率的同时也能保持较好的模型效果。 …

LLMs 系列科普文(13)

十三、AlphaGO 提到强化学习的历史&#xff0c;不得不提到 alphago&#xff0c;如果你不记得这是什么了&#xff0c;那你是否还曾记得&#xff0c;早些年 AI 已经可以在围棋中击败人类选手了。 AlphaGO 系统又 DeepMind 公司开发&#xff0c;你可以在网络上找到当初人机大战的…

element-plus 单选组件 el-radio,选不上,又没报错,直接复制官网也不行解决方案

在使用 Vue 框架开发项目时&#xff0c;Element UI 是常用的组件库。最近在开发中遇到了 Element 单选框组件el-radio的双向绑定问题&#xff0c;直接复制element官网上的的案例下来也是不得&#xff0c;经过调试和探索&#xff0c;终于找到了解决方案&#xff0c;特此记录分享…

idea 启动jar程序并调试

添加一个JAR 应用程序&#xff0c;填写以下内容&#xff1a; JAR路径&#xff1a;填写你要启动的jar程序的绝对路径 虚拟机选项&#xff1a;-Xmx1G -Xms1G -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 程序实参&#xff08;可选&#xff0c;minecraft专用…

CSS 轮廓(Outline)与边框(Border)的深度解析

在 CSS 中&#xff0c;轮廓&#xff08;outline&#xff09;和边框&#xff08;border&#xff09;是两个用于装饰元素的重要属性&#xff0c;但它们在功能、渲染机制和应用场景上存在显著差异。下面从多个维度进行详细对比&#xff1a; 一、基础定义与语法差异 边框&#xf…

Docker 部署 Python 的 Flask项目

文章目录 一、构建运行 Docker 容器1. 查找合适镜像2.本地docker 拉取镜像3.项目配置1. python项目下生成 requirements.txt 依赖文件2. 生成Dockerfile文件3.忽略不必要文件4. 构建镜像 4. 运行容器5.测试 二、常见问题与解决方案 一、构建运行 Docker 容器 1. 查找合适镜像 …

Vue入门到实战之第一篇【超基础】

Vue入门到实战之第一篇 学习路线1. Vue 概念1.1 Vue 是什么 2. 创建Vue实例&#xff0c;初始化渲染3. 插值表达式 {{ }}4. Vue响应式特性5. 开发者工具 学习路线 1. Vue 概念 1.1 Vue 是什么 概念&#xff1a; Vue是一个用于 构建用户界面1 的 渐进式2 框架3 1&#xff1a;基…

实时数据分析的技术架构:Lambda vs Kappa架构选择

文章目录 引言:实时数据分析架构的重要性Lambda架构深度解析Kappa架构技术特性架构对比分析维度性能与可扩展性评估技术栈选型指南实际应用场景分析成本效益对比模型混合架构与演进策略企业级决策框架最佳实践与案例研究技术趋势与未来展望引言:实时数据分析架构的重要性 在…

springboot2.x升级springboot3.x

springboot2.x升级springboot3.x 背景升级jdk版本为17以上springboot版本修改javax包更新mybatis-plus升级swagger升级springdocspringdoc配置 背景 当前项目是springboot2.5.9版本的springbootmybatis-plus项目&#xff0c;需要升级到springboot3.5.0项目。 升级jdk版本为17…

Python训练打卡Day43

复习日 1.卷积神经网络的基本概念 2.kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 tips:注册kaggle的注意事项 安装插件&#xff1a;Header Editor 然后打开扩展选项&#xff1a; 输入网址&#xff1a;ht…

227.2018年蓝桥杯国赛 - 交换次数(中等)- 贪心

227. 交换次数&#xff08;贪心&#xff09; 1. 2018年蓝桥杯国赛 - 交换次数&#xff08;中等&#xff09; 标签&#xff1a;2018 暴力 国赛 1.1 题目描述 IT 产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯&#xff08;简称 BAT &#xff09;在某海滩进行招聘活动。…

STM32入门学习之系统时钟配置

1. 时钟就是单片机的心脏。单片机根据时钟频率来控制每个部件的工作&#xff0c;时钟是单片机的脉搏&#xff0c;决定了每条命令运行的速率&#xff0c;没有时钟单片机将停止工作。 如何理解“时钟决定了单片机每条命令运行的速率”&#xff1f; 首先需要去理解单片机中的时…

【ArcGIS Pro微课1000例】0072:如何自动保存编辑内容及保存工程?

文章目录 一、自动保存编辑内容二、自动保存工程在使用ArcGIS或者ArcGIS Pro时,经常会遇到以下报错,无论点击【发送报告】,还是【不发送】,软件都会强制退出,这时如果对所操作没有保存,就会前功尽弃。 此时,自动保存工作就显得尤为重要,接下来讲解两种常见的自动保存方…

AU音频软件|Audition 2025网盘下载与安装教程指南

说起AU&#xff0c;有些小伙伴可能第一印象是化学元素金&#xff08;Aurum&#xff09;。实际上&#xff0c;本文要介绍的AU&#xff0c;全称是Adobe Audition&#xff0c;是一款专业音频编辑和混音软件‌&#xff0c;广泛应用于音乐制作、广播、电影及视频声音设计等领域。 目…

网络编程(TCP编程)

思维导图 1.基础流程 流程图中是TCP连接的基础步骤&#xff0c;其他操作都是在此基础上进行添加修改。 2.函数接口 2.1 创建套接字&#xff08;socket&#xff09; int socket(int domain, int type, int protocol); 头文件&#xff1a;#include <sys/types.h> …

热成像实例分割电力设备数据集(3类,838张)

在现代电力系统的运维管理中&#xff0c;红外热成像已经成为检测设备隐患、预防故障的重要手段。相比传统可见光图像&#xff0c;红外图像可揭示设备温度分布&#xff0c;从而更直观地反映过热、老化等问题。而在AI赋能下&#xff0c;通过实例分割技术对热成像中的电力设备进行…

用电脑通过USB总线连接控制keysight示波器

通过USB总线控制示波器的优势 在上篇文章我介绍了如何通过网线远程连接keysight示波器&#xff0c;如果连接的距离不是很远&#xff0c;也可以通过USB线将示波器与电脑连接起来&#xff0c;实现对示波器的控制和截图。 在KEYSIGHT示波器DSOX1204A的后端&#xff0c;除了有网口…

uni-app学习笔记二十四--showLoading和showModal的用法

showLoading(OBJECT) 显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的文字内容&#xff0c;显示在loading的下方maskBoolean否是否显示透明蒙层&#xff0c;防止触摸穿透&#xff0c;默…

【Linux】centos软件安装

目录 Linux下安装软件的办法什么是yum使用yum试着安装软件查看yum源配置额外的第三方库 Linux下安装软件的办法 做为一个操作系统&#xff0c;与win和mac一样&#xff0c;安装软件无可厚非。那Linux下安装软件有哪些办法呢&#xff1f;第一种是直接下载源代码本地编译安装&…

基于Vue3.0的在线工具网站

文章目录 1、初始化项目1.1 创建项目1.2 安装vue路由1.3 安装UI库2、首页搭建2.0 页面布局2.1 页头2.2 侧边栏2.3 内容显示区域3、字符串加密解密功能实现3.1 页面构建3.2 实现加密/解密4、Json工具4.1 Json格式化4.1.1 搭建页面4.1.2 实现Json格式化4.2 Json转XML4.1.1 搭建页…