带方形边框的 JCheckBox
JCheckBox with square border
Mac OS 中的默认 JCheckBox
边框是圆形的,但我需要一个 方形 作为复选框。
有没有办法在不使用 ImageIcon
的情况下 完成此任务?
换句话说,我需要一些 Java 类 的例子来实现漂亮的方形复选框(类似于 this)。
我知道你说过 "without using an ImageIcon" - 但是,这是最简单的解决方案,不需要大量的工作并且可以轻松生成 (unselected/selected) 轻松快捷
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);
}
}
But I said ...
为什么每个人都这么执着于不使用他们可用的最简单的解决方案。
在这种情况下,下一个最简单的解决方案可能是简单地覆盖 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());
}
}
Mac OS 中的默认 JCheckBox
边框是圆形的,但我需要一个 方形 作为复选框。
有没有办法在不使用 ImageIcon
的情况下 完成此任务?
换句话说,我需要一些 Java 类 的例子来实现漂亮的方形复选框(类似于 this)。
我知道你说过 "without using an ImageIcon" - 但是,这是最简单的解决方案,不需要大量的工作并且可以轻松生成 (unselected/selected) 轻松快捷
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);
}
}
But I said ...
为什么每个人都这么执着于不使用他们可用的最简单的解决方案。
在这种情况下,下一个最简单的解决方案可能是简单地覆盖 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());
}
}