Java如何自定义JCheckBox图标?

JCheckBox 可以有不同的状态图标,包括默认图标,选定的图标,禁用的图标,按下的图标或过渡图标等。请参见下面的代码并尝试一下。

package org.nhooo.example.swing;

import javax.swing.*;
import java.awt.*;

public class JCheckBoxCustomIcon extends JFrame {
    public JCheckBoxCustomIcon() throws HeadlessException {
        initialize();
    }

    private void initialize() {
        setSize(300, 300);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.LEFT));

        // 创建带有文本标签的复选框
        JCheckBox checkBox = new JCheckBox("Check me!");
        checkBox.setSelected(true);

        // 设置复选框的默认图标
        checkBox.setIcon(new ImageIcon("icon.png"));
        // 选择复选框状态时设置选择的图标
        checkBox.setSelectedIcon(new ImageIcon("selectedIcon.png"));
        // 将复选框设置为禁用图标
        checkBox.setDisabledIcon(new ImageIcon("disabledIcon.png"));
        // 将复选框设置为禁用选定的图标
        checkBox.setDisabledSelectedIcon(new ImageIcon("disabledSelectedIcon.png"));
        // 按下复选框时设置复选框图标
        checkBox.setPressedIcon(new ImageIcon("pressedIcon.png"));
        // 鼠标悬停在复选框上方时设置图标
        checkBox.setRolloverIcon(new ImageIcon("rolloverIcon.png"));
        // 鼠标悬停在所选复选框上时设置图标
        checkBox.setRolloverSelectedIcon(new ImageIcon("rolloverSelectedIcon.png"));

        getContentPane().add(checkBox);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new JCheckBoxCustomIcon().setVisible(true);
            }
        });
    }
}