Swing/RadioButtonTextColor のバックアップの現在との差分(No.4)
TITLE:JRadioButtonの文字色を変更
Posted by terai at 2009-01-05
JRadioButtonの文字色を変更
JRadioButtonの文字色やアイコンを変更します。- category: swing folder: RadioButtonTextColor title: JRadioButtonの文字色を変更 tags: [JRadioButton, Icon] author: aterai pubdate: 2009-01-05T12:42:32+09:00 description: JRadioButtonの状態の変化に応じて、その文字色やアイコンを変更します。 image:
概要
JRadioButton
の状態の変化に応じて、その文字色やアイコンを変更します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
class ColorRadioButton extends JRadioButton {
private static final Color defaultColor = Color.BLACK;
private static final Color pressedColor = Color.GREEN;
private static final Color defaultColor = Color.BLACK;
private static final Color pressedColor = Color.GREEN;
private static final Color selectedColor = Color.RED;
private static final Color rolloverColor = Color.BLUE;
private static final int iconSize = 16;
@Override
protected void fireStateChanged() {
#spanadd
#spanend
@Override protected void fireStateChanged() {
ButtonModel model = getModel();
if(!model.isEnabled()) {
if (!model.isEnabled()) {
setForeground(Color.GRAY);
}else if(model.isPressed() && model.isArmed()) {
} else if (model.isPressed() && model.isArmed()) {
setForeground(pressedColor);
}else if(model.isSelected()) {
} else if (model.isSelected()) {
setForeground(selectedColor);
}else if(isRolloverEnabled() && model.isRollover()) {
} else if (isRolloverEnabled() && model.isRollover()) {
setForeground(rolloverColor);
}else{
} else {
setForeground(defaultColor);
}
super.fireStateChanged();
};
#spandel
//...
#spanend
}
// ...
解説
上記のサンプルでは、JRadioButtonが選択やロールオーバーした時の文字色を、マウスリスナではなく、fireStateChangedメソッドをオーバーライドして変更しています。解説
上記のサンプルでは、JRadioButton
が選択やロールオーバーした時の文字色をマウスリスナーではなくAbstractButton#fireStateChanged()
メソッドをオーバーライドして変更しています。
以下のような、ChangeListenerを使用する方法もあります。
- 文字色ではなくアイコンを変更する場合は
setPressedIcon(...)
、setSelectedIcon(...)
、setRolloverIcon(...)
メソッドが使用可能 - 以下のような
ChangeListener
を使用する方法もある#spandel radioButton.addChangeListener(new javax.swing.event.ChangeListener() { #spanend public void stateChanged(javax.swing.event.ChangeEvent e) { ButtonModel model = getModel(); if(!model.isEnabled()) { setForeground(Color.GRAY); }else if(model.isPressed() && model.isArmed()) { setForeground(pressedColor); }else if(model.isSelected()) { setForeground(selectedColor); }else if(isRolloverEnabled() && model.isRollover()) { setForeground(rolloverColor); }else{ setForeground(defaultColor); #spanadd radioButton.addChangeListener(new ChangeListener() { #spanend @Override public void stateChanged(ChangeEvent e) { ButtonModel model = radioButton.getModel(); if (!model.isEnabled()) { radioButton.setForeground(Color.GRAY); } else if (model.isPressed() && model.isArmed()) { radioButton.setForeground(pressedColor); } else if (model.isSelected()) { radioButton.setForeground(selectedColor); } else if (isRolloverEnabled() && model.isRollover()) { radioButton.setForeground(rolloverColor); } else { radioButton.setForeground(defaultColor); } } });
- - アイコンは、setPressedIcon、setSelectedIcon、setRolloverIconメソッドなどが用意されているので、これを使用しています。
参考リンク
- AbstractButton#fireStateChanged() (Java Platform SE 8)
- ButtonModel (Java Platform SE 8)
- ChangeListener (Java Platform SE 8)
コメント
- スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- terai
コメント
- スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- aterai