【问题标题】:JCheckBox with square border带方形边框的 JCheckBox
【发布时间】:2018-05-16 07:35:04
【问题描述】:

Mac OS 中默认的 JCheckBox 边框是圆形的,但我需要一个 正方形 作为复选框。
有没有办法在不使用ImageIcon的情况下完成这项任务?
换句话说,我需要一些实现漂亮方形复选框的 Java 类示例(类似于this)。

【问题讨论】:

  • 您可以创建自己的,使用 AbstractButtonButtonModel
  • JCheckBox 是一个JToggleButton,它在图像被选中时切换图像。因此,正如 MadProgrammer 所表达的那样,您可以拥有 selectedun-selected 状态的方形图像,并轻松地自己实现它。
  • 我找到的最简单的解决方案(在 5 秒的测试中)是使用 JCheckBox#setIconJCheckBoc#setSelectedIcon 并传递两个不同的 Icons(我只是创建了几个 BufferedImages填充不同的颜色),因此,如果您反对可能需要 10 行代码的解决方案,那么您唯一的其他解决方案就是制作自己的按钮并按照您想要的方式呈现它......
  • @MadProgrammer 你能给我一个具体的例子吗?非常感谢:)
  • @Yoghi 我提供了两个

标签: java swing checkbox jcheckbox


【解决方案1】:

我知道你说过“不使用 ImageIcon” - 但是,它是最简单的解决方案,不需要太多麻烦,并且可以轻松快速轻松地生成(未选中/选中)

public class ColorCheckBox extends JCheckBox {

    public ColorCheckBox(Color unselectedColor, Color selectedColor) {
        setSelectedIcon(icon(Color.MAGENTA));
        setIcon(icon(Color.WHITE));
    }

    protected Icon icon(Color filled) {
        BufferedImage img = new BufferedImage(25, 25, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = img.createGraphics();
        g2d.setColor(filled);
        g2d.fillRect(0, 0, 25, 25);
        g2d.dispose();
        return new ImageIcon(img);
    }

}

但我说...

为什么每个人都如此执着于不使用他们可用的最简单的解决方案。

在这种情况下,下一个最简单的解决方案可能是简单地覆盖 paintComponent 方法并绘制 UI 代表正在绘制的任何内容...

public class ColorCheckBox extends JCheckBox {

    private Color unselectedColor;
    private Color selectedColor;

    public ColorCheckBox(Color unselectedColor, Color selectedColor) {
        this.unselectedColor = unselectedColor;
        this.selectedColor = selectedColor;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); 
        if (isSelected()) {
            g.setColor(selectedColor);
        } else {
            g.setColor(unselectedColor);
        }
        g.fillRect(0, 0, getWidth(), getHeight());
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2016-07-28
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多