package com.example.client.utils; import javax.swing.*; import java.awt.*; public class CustomPanel extends JPanel { private static final int DIAMETER = 20; // 圆的直径 private static final int SPACING = 10; // 圆和文字之间的间距 private static class CircleInfo { String colorCode; String text; CircleInfo(String colorCode, String text) { this.colorCode = colorCode; this.text = text; } } public CustomPanel() { // 添加多个圆形和文字信息 CircleInfo[] circleInfos = new CircleInfo[]{ new CircleInfo("#3498DB", "进行中"), new CircleInfo("#F1C40F", "临期(7天)"), new CircleInfo("#E74C3C", "逾期"), new CircleInfo("#2ECC71", "正常完成"), new CircleInfo("#006400", "超期完成") }; setCircleInfos(circleInfos); } private CircleInfo[] circleInfos; public void setCircleInfos(CircleInfo[] circleInfos) { this.circleInfos = circleInfos; revalidate(); repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); int x = 140; // 起始绘制位置 int y = (getHeight() - DIAMETER) / 2; // 垂直居中 for (CircleInfo circleInfo : circleInfos) { // 解析颜色代码并绘制圆形 Color color = Color.decode(circleInfo.colorCode); g.setColor(color); g.fillOval(x, y, DIAMETER, DIAMETER); // 设置文字颜色和字体,并绘制文字 g.setColor(Color.BLACK); g.setFont(new Font("宋体", Font.BOLD, 20)); x += DIAMETER + SPACING; // 更新绘制位置 g.drawString(circleInfo.text, x, y + DIAMETER / 2 + 5); x += g.getFontMetrics().stringWidth(circleInfo.text) + 20; // 更新绘制位置 } } }