---
category: swing
folder: RadioButtonTextColor
title: JRadioButtonの文字色を変更
tags: [JRadioButton, Icon]
author: aterai
pubdate: 2009-01-05T12:42:32+09:00
description: JRadioButtonの状態の変化に応じて、その文字色やアイコンを変更します。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTRa2rE0nI/AAAAAAAAAhI/A6NX-uUoYjM/s800/RadioButtonTextColor.png
---
* Summary [#summary]
`JRadioButton`の状態の変化に応じて、その文字色やアイコンを変更します。
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTRa2rE0nI/AAAAAAAAAhI/A6NX-uUoYjM/s800/RadioButtonTextColor.png)
* Source Code Examples [#sourcecode]
#code(link){{
class ColorRadioButton extends JRadioButton {
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() {
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);
}
super.fireStateChanged();
}
// ...
}}
* Description [#explanation]
* Description [#description]
上記のサンプルでは、`JRadioButton`が選択やロールオーバーした時の文字色をマウスリスナーではなく`AbstractButton#fireStateChanged()`メソッドをオーバーライドして変更しています。
- 文字色ではなくアイコンを変更する場合は`setPressedIcon(...)`、`setSelectedIcon(...)`、`setRolloverIcon(...)`メソッドが使用可能
- 以下のような`ChangeListener`を使用する方法もある
#code{{
radioButton.addChangeListener(new ChangeListener() {
@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);
}
}
});
}}
* Reference [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/AbstractButton.html#fireStateChanged-- AbstractButton#fireStateChanged() (Java Platform SE 8)]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/ButtonModel.html ButtonModel (Java Platform SE 8)]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/event/ChangeListener.html ChangeListener (Java Platform SE 8)]
* Comment [#comment]
#comment
- スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- &user(aterai); &new{2009-06-03 (水) 21:27:13};
#comment