Swing/CheckBoxColor のバックアップの現在との差分(No.8)
-
category: swing
folder: CheckBoxColor
title: JCheckBoxのチェックアイコンを変更
tags: [JCheckBox, Icon, UIManager]
author: aterai
pubdate: 2007-04-09T15:16:42+09:00
description: JCheckBoxで使用するチェックアイコンの色や形を変更します。
image:
概要
概要
JCheckBox
で使用するチェックアイコンの色や形を変更します。
Screenshot

Advertisement
サンプルコード
サンプルコード
#spandel
JCheckBox cb2 = new JCheckBox("check2");
#spanend
#spandel
cb2.setIcon(new MyCheckBoxIcon2());
#spanend
#spandel
View in GitHub: Java, Kotlin#spanend
#spandel
class MyCheckBoxIcon2 implements Icon {
#spanend
#spanadd
class CheckBoxIcon2 implements Icon {
#spanend
private final Icon orgIcon = UIManager.getIcon("CheckBox.icon");
@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);
Graphics2D g2 = (Graphics2D) g.create();
g2.translate(x, y);
orgIcon.paintIcon(c, g2, 0, 0);
if (c instanceof AbstractButton) {
AbstractButton b = (AbstractButton) c;
ButtonModel model = b.getModel();
g2.setColor(new Color(255, 155, 155, 100));
g2.fillRect(2, 2, getIconWidth() - 4, getIconHeight() - 4);
if (model.isSelected()) {
g2.setColor(Color.RED);
g2.drawLine(9, 3, 9, 3);
g2.drawLine(8, 4, 9, 4);
g2.drawLine(7, 5, 9, 5);
g2.drawLine(6, 6, 8, 6);
g2.drawLine(3, 7, 7, 7);
g2.drawLine(4, 8, 6, 8);
g2.drawLine(5, 9, 5, 9);
g2.drawLine(3, 5, 3, 5);
g2.drawLine(3, 6, 4, 6);
}
}
g2.dispose();
}
#spanadd
#spanend
@Override public int getIconWidth() {
return orgIcon.getIconWidth();
}
#spanadd
#spanend
@Override public int getIconHeight() {
return orgIcon.getIconHeight();
}
}
解説
-
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
をアルファ値を設定した色で上書きしています。
-
解説
-
Default
- デフォルトの
JCheckBox
- デフォルトの
-
WindowsIconFactory
-
com/sun/java/swing/plaf/windows/WindowsIconFactory.java
からXP
スタイルではない場合のアイコンをコピーし、一部色などを変更
-
-
CheckBox.icon+RED
-
UIManager.getIcon("CheckBox.icon")
で取得したオリジナルのアイコンをアルファ値を設定した色で上書きし、✔マークも色を変えて塗り潰し - チェックの形は
WindowsIconFactory
からコピーしているのでWindowsLookAndFeel
以外では枠からはみ出してしまう
-
-
MetalCheckBoxIcon+GRAY
-
javax.swing.plaf.metal.MetalCheckBoxIcon
をアルファ値を設定した色で上書き
-
check1
~check3
で生成したアイコンを、それぞれJCheckBox#setIcon
で設定しています。
- -
-
Windows XP
スタイル以外を使用する環境で色を変更する場合は以下のような方法もある
XP
スタイルで無い場合(Windows
環境以外ではテストしていない)、色を変更するだけなら、以下のようにする方法もあります。
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");
参考リンク
- 進歩したSynth
-
SynthLookAndFeel
を使って、画像でチェックを描画するサンプルなどが紹介されています。
-
参考リンク
- 進歩したSynth
-
SynthLookAndFeel
を使って、画像でチェックを描画するサンプルなどが紹介されている
-