TITLE:JCheckBoxのチェックアイコンを変更

JCheckBoxのチェックアイコンを変更

編集者:Terai Atsuhiro
作成日:2007-04-09
更新日:2024-09-09 (月) 16:47:20

概要

JCheckBoxで使用するチェックアイコンの色や形を変更します。

#screenshot

サンプルコード

JCheckBox cb2 = new JCheckBox("check2");
cb2.setIcon(new MyCheckBoxIcon2());

class MyCheckBoxIcon2 implements Icon {
  private final Icon orgIcon = UIManager.getIcon("CheckBox.icon");
  public void paintIcon(Component c, Graphics g, int x, int y) {
    orgIcon.paintIcon(c, g, x, y);
    AbstractButton b = (AbstractButton)c;
    ButtonModel model = b.getModel();
    g.setColor(new Color(255, 155, 155, 100));
    g.fillRect(x+2,y+2,getIconWidth()-4,getIconHeight()-4);
    if(model.isSelected()) {
      g.setColor(Color.RED);
      g.drawLine(x+9, y+3, x+9, y+3);
      g.drawLine(x+8, y+4, x+9, y+4);
      g.drawLine(x+7, y+5, x+9, y+5);
      g.drawLine(x+6, y+6, x+8, y+6);
      g.drawLine(x+3, y+7, x+7, y+7);
      g.drawLine(x+4, y+8, x+6, y+8);
      g.drawLine(x+5, y+9, x+5, y+9);
      g.drawLine(x+3, y+5, x+3, y+5);
      g.drawLine(x+3, y+6, x+4, y+6);
    }
  }
  public int getIconWidth() {
    return orgIcon.getIconWidth();
  }
  public int getIconHeight() {
    return orgIcon.getIconHeight();
  }
}
  • &jnlp;
  • &jar;
  • &zip;

解説

  • org
    • 通常のJCheckBoxです。
  • check1
    • com/sun/java/swing/plaf/windows/WindowsIconFactory.java から、XPスタイルではない場合のアイコンをコピーし、一部色などを変更しています。
  • check2
    • UIManager.getIcon("CheckBox.icon")で取得したオリジナルのアイコンを、アルファ値を設定した色で上書きし、チェック(レ)も色を変えて塗り潰しています。ただしチェックの形はWindowsIconFactoryからコピーしているので、別のLnfでははみ出してしまいます。
  • check3
    • javax.swing.plaf.metal.MetalCheckBoxIconをアルファ値を設定した色で上書きしています。

check1~check3で生成したアイコンを、それぞれJCheckBox#setIconで設定しています。

XPスタイルで無い場合*1、色を変更するだけなら、以下のようにする方法もあります。

System.setProperty("swing.noxp", "true");
UIManager.put("CheckBox.interiorBackground", Color.GREEN);
UIManager.put("CheckBox.darkShadow", Color.RED);
JCheckBox cb = new JCheckBox("check box");

参考リンク

コメント