Java Swing Loading转圈的进度提示框

前因:我们开发的web应用,有个奇葩的需求,需要客户触发到客户端与第三方交互的地方加个Loading效果,已经脱离了web程序页面交互范围了,只是通过socket进行通信交互,就产生了swing 画个转圈圈的想法是不是很奇葩。

总是觉得Java Swing没有Android的好,不能自定义组件,实现漂亮的进度提示框,比如那种转圈的,谷歌了一下竟然发现有大牛实现了
 

类似的额效果:

具体只需要两个类

AnimatedPanel.java

// 展示部分代码
synchronized (convolvedImage) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); FontRenderContext context = g2.getFontRenderContext();
TextLayout layout = new TextLayout(message, font, context);
Rectangle2D bounds = layout.getBounds(); int x = (width - convolvedImage.getWidth(null)) / 2;
int y = (int) (height - (convolvedImage.getHeight(null) + bounds.getHeight() + layout.getAscent())) / 2; g2.drawImage(convolvedImage, x, y, this);
g2.setColor(new Color(0, 0, 0, (int) (gradient * 255)));
layout.draw(g2, (float) (width - bounds.getWidth()) / 2,
(float) (y + convolvedImage.getHeight(null) + bounds.getHeight() + layout.getAscent()));
}
......//
 

InfiniteProgressPanel.java

// 展示部分代码
public void paintComponent(Graphics g) {
if (started) {
int width = getWidth();
int height = getHeight(); double maxY = 0.0; Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHints(hints); g2.setColor(new Color(255, 255, 255, (int) (alphaLevel * shield)));
g2.fillRect(0, 0, getWidth(), getHeight()); for (int i = 0; i < ticker.length; i++) {
int channel = 224 - 128 / (i + 1);
g2.setColor(new Color(channel, channel, channel, alphaLevel));
g2.fill(ticker[i]); Rectangle2D bounds = ticker[i].getBounds2D();
if (bounds.getMaxY() > maxY) {
maxY = bounds.getMaxY();
}
} if (text != null && text.length() > 0) {
FontRenderContext context = g2.getFontRenderContext();
TextLayout layout = new TextLayout(text, getFont(), context);
Rectangle2D bounds = layout.getBounds();
g2.setColor(getForeground());
layout.draw(g2, (float) (width - bounds.getWidth()) / 2,
(float) (maxY + layout.getLeading() + 2 * layout.getAscent()));
}
}
}

如何在你的Java Swing使用呢,如下步骤:

JFrame frame = new JFrame();
// ...
InfiniteProgressPanel glasspane = new InfiniteProgressPanel();
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
glasspane.setBounds(100, 100, (dimension.width) / 2, (dimension.height) / 2);
frame.setGlassPane(glasspane);
glasspane.start();//开始动画加载效果
frame.setVisible(true); // Later, to disable,在合适的地方关闭动画效果
glasspane.stop();

最终效果:

可以添加订阅号:码猿趣事

回覆: “loading-demo” 下载用例即可

Java Swing Loading转圈的进度提示框的更多相关文章

  1. Java Swing 创建转圈的进度提示框

    Java Swing 创建转圈的进度提示框 摘自 https://blog.csdn.net/nihaoqiulinhe/article/details/52439486 置顶2016年09月05日 ...

  2. JAVA swing中JPanel如何实现分组框的效果以及设置边框颜色 分类: Java Game 2014-08-16 12:21 198人阅读 评论(0) 收藏

    代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import javax.sw ...

  3. Java Swing界面编程(28)---复选框:JCheckBox

    程序能够通过JRadioButton实现单选button的功能,那么要实现复选框的功能,则必须使用JCheckBox完毕. package com.beyole.util; import java.a ...

  4. Java Swing应用程序 JComboBox下拉框联动查询

    在web项目中,通过下拉框.JQuery和ajax可以实现下拉框联动查询. 譬如说,当你查询某个地方时,页面上有:省份:<下拉框省份> 市区:<下拉框市区> 县乡:<下拉 ...

  5. 第三方框架MBProgressHUD-----实现各种提示框

    程序运行显示如下 : 点击按钮实现对应的提示框: 这里只截取了其中一张图,有兴趣的可以自己运行程序,查看其他的几种提示框哟!!! 第三方框架MBProgressHUD的下载地址:https://git ...

  6. 「小程序JAVA实战」小程序 loading 提示框与页面跳转(37)

    转自:https://idig8.com/2018/09/02/xiaochengxujavashizhanxiaochengxu-loading-tishikuangyuyemiantiaozhua ...

  7. Java的awt包的使用实例和Java的一些提示框

    一.awt的一些组件 Label l1=new Label("姓名:"); //标签 Label l2=new Label("密码:"); TextField ...

  8. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结

    paip.web数据绑定 下拉框的api设计 选择框 uapi  python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...

  9. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  10. java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦.效果差. 麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclip ...

随机推荐

  1. 【ClickHouse】0:clickhouse学习1之数据引擎(数据库引擎,表引擎)

    ClickHouse提供了大量的数据引擎,分为数据库引擎.表引擎,根据数据特点及使用场景选择合适的引擎至关重要,这里根据资料做一些总结. 数据库引擎官方文档: https://clickhouse.t ...

  2. yb课堂 实战之路由拦截和订单模块 《四十二》

    前置守护 路由拦截功能开发 文档:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html router里面配置需要登陆的路由 ...

  3. 外部网关协议BGP

    不能全部使用RIP与OSPF的原因有二:互联网规模太大,自治系统间路由选择困难:自治系统间路由选择必须考虑有关策略. 在每一个自治系统中有两种不同功能的路由器,边界路由器和内部路由器. BGP四种报文 ...

  4. 欢迎访问pycharm 每次开启时都显示

    文件->设置->外观与行为->系统设置->将"启动时重新打开项目"前的勾去掉

  5. CSP2023-J/S 游记

    本人 初二 \(\texttt{HA}\) CSP2023 成绩: CSP-J 第一轮:\(86.5\) CSP-S 第一轮:\(41.5\) CSP-J 第二轮:\(100+100+100+0=30 ...

  6. P9058 [Ynoi2004] rpmtdq 与 P9678 [ICPC2022 Jinan R] Tree Distance

    思路: 注意到点对数量有 \(N^2\) 个,考虑丢掉一些无用的点对. 对于点对 \((x_1,y_1),(x_2,y_2)\),满足 \(x_1 \le x_2 < y_2 \le y_1\) ...

  7. windows server dhcp与AD域

    创建两台windows server 2016 同一个网络适配器 windows1 配置window1手动网络 安装域 设置密码下一步下一步 重启 完成域安装后创建用户 配置windows1 dhcp ...

  8. os.popen(cmd) 与 os.system(cmd) 的区别

    os.popen(cmd) 与 os.system(cmd) 的区别 1,os.popen(cmd) 不会直接返回任何数据,os.system(cmd) 会直接输出结果(返回的却是int状态码) 2, ...

  9. web3 产品介绍:metamask 钱包 使用dapp更方便的钱包

    Metamask钱包是一种基于区块链技术的数字货币钱包,它允许用户在安全.便捷的环境下管理自己的加密资产.Metamask钱包是以太坊生态系统中最流行的钱包之一,它具有易于使用.安全性高和功能强大等优 ...

  10. OpenAI内讧更多细节曝光:奥特曼离间董事会失败

    参考: https://www.thepaper.cn/newsDetail_forward_25512687 ============================== 根据 https://ww ...