• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JCheckBoxのチェックアイコンを変更
#navi(../)
RIGHT:Posted by [[aterai]] at 2007-04-09
*JCheckBoxのチェックアイコンを変更 [#j820b62f]
JCheckBoxで使用するチェックアイコンの色や形を変更します。
---
title: JCheckBoxのチェックアイコンを変更
tags: [JCheckBox, Icon, UIManager]
author: aterai
pubdate: 2007-04-09T15:16:42+09:00
description: JCheckBoxで使用するチェックアイコンの色や形を変更します。
---
* 概要 [#j820b62f]
`JCheckBox`で使用するチェックアイコンの色や形を変更します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTI225hC_I/AAAAAAAAATc/YxhkQ5Bq2sk/s800/CheckBoxColor.png)

//#screenshot
#ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTI225hC_I/AAAAAAAAATc/YxhkQ5Bq2sk/s800/CheckBoxColor.png)

**サンプルコード [#ue47b08d]
#code{{
* サンプルコード [#ue47b08d]
#code(link){{
JCheckBox cb2 = new JCheckBox("check2");
cb2.setIcon(new MyCheckBoxIcon2());
}}
#code{{
class MyCheckBoxIcon2 implements Icon {
  private final Icon orgIcon = UIManager.getIcon("CheckBox.icon");
  public void paintIcon(Component c, Graphics g, int x, int y) {
  @Override 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() {
  @Override public int getIconWidth() {
    return orgIcon.getIconWidth();
  }
  public int getIconHeight() {
  @Override public int getIconHeight() {
    return orgIcon.getIconHeight();
  }
}
}}

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

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

XPスタイルで無い場合((Windows環境以外ではテストしていません))、色を変更するだけなら、以下のようにする方法もあります。
`XP`スタイルで無い場合(`Windows`環境以外ではテストしていない)、色を変更するだけなら、以下のようにする方法もあります。

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

**参考リンク [#qf2b955f]
-[http://www.ibm.com/developerworks/jp/java/library/j-synth/ 進歩したSynth]
--L&FにSynthを使って、画像でチェックを描画するサンプルなどが紹介されています。
* 参考リンク [#qf2b955f]
- [http://www.ibm.com/developerworks/jp/java/library/j-synth/ 進歩したSynth]
-- `SynthLookAndFeel`を使って、画像でチェックを描画するサンプルなどが紹介されています。

**コメント [#of8fbb29]
* コメント [#of8fbb29]
#comment
#comment