最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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();
// 计算实际绘制
相关文章
- 坚持看完这套JDK源码系列-彻底告别CRUD开发|深度解析:java.lang.String源码精讲 05-28
- VEIN修改器下载入口-VEIN修改器官方地址获取 05-28
- 《梦幻西游》王谢介绍-梦幻西游玩家王谢身份揭秘 05-28
- 英雄联盟移动预测有啥用 05-28
- UC官网网页版-手机浏览器官方网址导航 05-28
- 名将杀申不害加鲁肃组合玩法是什么 05-28