一聚教程网:一个值得你收藏的教程网站

热门教程

Java Swing自定义组件库系列第八篇

时间:2026-05-28 08:30:01 编辑:袖梨 来源:一聚教程网

Swing原生复选框样式受限于操作系统,而CusCheckBox通过自定义图标实现了圆角、颜色、状态效果的高度定制化,为Java UI开发带来更多可能性。 自定义复选框 — CusCheckBox 一、背景 系统默认的JCheckBox在不同操作系统下呈现不同风格,且难以调整圆角、颜色等视觉元素。CusCheckBox通过实现Icon接口来自定义绘制逻辑,完美解决了这些问题,支持多种交互状态和样式配置。 二、核心设计 该组件采用双类架构设计: CheckBoxIcon:实现Icon接口,负责绘制复选框的各个视觉元素 CusCheckBox:继承JCheckBox,整合自定义图标并提供样式配置接口 三、CheckBoxIcon 源码 import lombok.Setter;import javax.swing.*; import java.awt.*;/** * 自定义 JCheckBox 图标类 * 实现 Icon 接口,负责绘制复选框的图标部分 * * 使用示例: * CheckBoxIcon icon = new CheckBoxIcon(20, Color.decode("#409EFF"), Color.WHITE); */ @Setter public class CheckBoxIcon implements Icon { /** 复选框大小 */ private int size; /** 圆角 */ private boolean rounded = true; /** 圆角半径 */ private int borderRadius = 8; /** 边框宽度 */ private int borderThickness = 1; /** 边框颜色 */ private Color borderColor = Color.GRAY; /** 选中背景颜色 */ private Color selectedBg; /** 对勾颜色 */ private Color checkColor; /** 悬停颜色 */ private Color hoverColor; /** 禁用颜色 */ private Color disabledColor = Color.decode("#E4E7ED"); /** 对勾宽度 */ private float checkThickness = 2.0f; /** 是否使用对勾(true=对勾,false=叉号) */ private boolean useCheckMark = true; /** 是否启用 */ private boolean enabled = true; /** * 构造函数 * @param size 图标尺寸 * @param selectedBg 选中时的背景色 * @param checkColor 对勾颜色 */ public CheckBoxIcon(int size, Color selectedBg, Color checkColor) { this.size = Math.max(16, size); this.selectedBg = selectedBg; this.checkColor = checkColor; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { AbstractButton button = (AbstractButton) c; ButtonModel model = button.getModel(); Graphics2D g2 = (Graphics2D) g; // 启用抗锯齿 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 获取状态 boolean isSelected = model.isSelected(); boolean isPressed = model.isPressed(); boolean isRollover = model.isRollover(); // 计算实际绘制

热门栏目