首页>代码>Java Swing组件开发圆形进度条特效代码>/CircleProgressBar/src/org/component/circleprogressbar/CircleProgressBar.java
package org.component.circleprogressbar; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JPanel; /** * 圆形进度条。 * * @author 钱佳明。 * @version 1.0。 * */ public class CircleProgressBar extends JPanel { private static final long serialVersionUID = 1L; /** * 最小进度值。 */ private int minimumProgress; /** * 最大进度值。 */ private int maximumProgress; /** * 当前进度值。 */ private int progress; /** * 背景颜色。 */ private Color backgroundColor; /** * 前景颜色。 */ private Color foregroundColor; /** * 数字颜色。 */ private Color digitalColor; /** * 创建一个圆形进度条对象。 */ public CircleProgressBar() { setMinimumProgress(0); setMaximumProgress(100); setProgress(0); setBackgroundColor(new Color(209, 206, 200)); setForegroundColor(new Color(172, 168, 163)); setDigitalColor(Color.BLACK); } /** * 绘制圆形进度条。 * * @param g * 画笔。 */ @Override public void paint(Graphics g) { super.paint(g); Graphics2D graphics2d = (Graphics2D) g; // 开启抗锯齿 graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int x = 0; int y = 0; int width = 0; int height = 0; int fontSize = 0; if (getWidth() >= getHeight()) { x = (getWidth() - getHeight()) / 2 + 25; y = 25; width = getHeight() - 50; height = getHeight() - 50; fontSize = getWidth() / 8; } else { x = 25; y = (getHeight() - getWidth()) / 2 + 25; width = getWidth() - 50; height = getWidth() - 50; fontSize = getHeight() / 8; } graphics2d.setStroke(new BasicStroke(20.0f)); graphics2d.setColor(backgroundColor); graphics2d.drawArc(x, y, width, height, 0, 360); graphics2d.setColor(foregroundColor); graphics2d.drawArc(x, y, width, height, 90, -(int) (360 * ((progress * 1.0) / (getMaximumProgress() - getMinimumProgress())))); graphics2d.setFont(new Font("黑体", Font.BOLD, fontSize)); FontMetrics fontMetrics = graphics2d.getFontMetrics(); int digitalWidth = fontMetrics.stringWidth(progress + "%"); int digitalAscent = fontMetrics.getAscent(); graphics2d.setColor(digitalColor); graphics2d.drawString(progress + "%", getWidth() / 2 - digitalWidth / 2, getHeight() / 2 + digitalAscent / 2); } /** * 返回最小进度值。 * * @return 最小进度值。 */ public int getMinimumProgress() { return minimumProgress; } /** * 设置最小进度值。 * * @param minimumProgress * 最小进度值。 */ public void setMinimumProgress(int minimumProgress) { if (minimumProgress <= getMaximumProgress()) { this.minimumProgress = minimumProgress; } } /** * 返回最大进度值。 * * @return 最大进度值。 */ public int getMaximumProgress() { return maximumProgress; } /** * 设置最大进度值。 * * @param maximumProgress * 最大进度值。 */ public void setMaximumProgress(int maximumProgress) { if (maximumProgress >= getMinimumProgress()) { this.maximumProgress = maximumProgress; } } /** * 返回当前进度值。 * * @return 当前进度值。 */ public int getProgress() { return progress; } /** * 设置当前进度值。 * * @param progress * 当前进度值。 */ public void setProgress(int progress) { if (progress >= getMinimumProgress() && progress <= getMaximumProgress()) { this.progress = progress; this.repaint(); } } /** * 返回背景颜色。 * * @return 背景颜色。 */ public Color getBackgroundColor() { return backgroundColor; } /** * 设置背景颜色。 * * @param backgroundColor * 背景颜色。 */ public void setBackgroundColor(Color backgroundColor) { this.backgroundColor = backgroundColor; this.repaint(); } /** * 返回前景颜色。 * * @return 前景颜色。 */ public Color getForegroundColor() { return foregroundColor; } /** * 设置前景颜色。 * * @param foregroundColor * 前景颜色。 */ public void setForegroundColor(Color foregroundColor) { this.foregroundColor = foregroundColor; this.repaint(); } /** * 返回数字颜色。 * * @return 数字颜色。 */ public Color getDigitalColor() { return digitalColor; } /** * 设置数字颜色。 * * @param digitalColor * 数字颜色。 */ public void setDigitalColor(Color digitalColor) { this.digitalColor = digitalColor; this.repaint(); } }

微信网友_6081345072959488 LV1
2022年8月9日
ff9y2022 LV1
2022年4月15日
1265260263 LV4
2022年4月8日
ㅤ LV1
2021年7月7日
兔子先生_ LV1
2021年5月29日
小宝的大宝 LV1
2021年5月11日
现场喷口水 LV1
2021年5月10日
ajie123 LV1
2021年4月25日
威 LV1
2021年4月16日
liumingxiy LV1
2021年3月19日

ezra77934 LV2
2023年9月16日
微信网友_5992582549164032 LV6
2023年3月7日
as365049954 LV2
2022年10月15日
微信网友_6081345072959488 LV1
2022年8月9日
kangqwe LV1
2022年7月20日
ff9y2022 LV1
2022年4月15日
随便你丶丶丿
2022年4月13日
暂无贡献等级
wddd1121 LV3
2022年4月8日
1265260263 LV4
2022年4月8日
一起吹过晚风的街 LV1
2022年4月8日