Swing/RadioButtonTextColor の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RadioButtonTextColor へ行く。
- Swing/RadioButtonTextColor の差分を削除
--- 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] `JRadioButton`の状態の変化に応じて、その文字色やアイコンを変更します。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTRa2rE0nI/AAAAAAAAAhI/A6NX-uUoYjM/s800/RadioButtonTextColor.png) * サンプルコード [#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 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(); } // ... }} * 解説 [#explanation] 上記のサンプルでは、`JRadioButton`が選択やロールオーバーした時の文字色をマウスリスナーではなく`AbstractButton#fireStateChanged()`メソッドをオーバーライドして変更しています。 - 文字色ではなくアイコンを変更する場合は、`setPressedIcon(...)`、`setSelectedIcon(...)`、`setRolloverIcon(...)`メソッドが使用可能 - 文字色ではなくアイコンを変更する場合は`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] - [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 - スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- &user(aterai); &new{2009-06-03 (水) 21:27:13}; #comment