• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JRadioButtonの文字色を変更
#navi(../)
RIGHT:Posted by [[terai]] at 2009-01-05
RIGHT:Posted by &author(aterai); at 2009-01-05
*JRadioButtonの文字色を変更 [#p72ca321]
JRadioButtonの文字色やアイコンを変更します。

-&jnlp;
-&jar;
-&zip;

#screenshot
//#screenshot
#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTRa2rE0nI/AAAAAAAAAhI/A6NX-uUoYjM/s800/RadioButtonTextColor.png)

**サンプルコード [#a8917062]
#code{{
#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();
  };
//...
}}

**解説 [#v545d21a]
上記のサンプルでは、JRadioButtonが選択やロールオーバーした時の文字色を、マウスリスナではなく、fireStateChangedメソッドをオーバーライドして変更しています。

アイコンは、setPressedIcon、setSelectedIcon、setRolloverIconメソッドなどが用意されているので、これを使用しています。

----
以下のような、ChangeListenerを使用する方法もあります。
#code{{
radioButton.addChangeListener(new javax.swing.event.ChangeListener() {
  public void stateChanged(javax.swing.event.ChangeEvent e) {
    ButtonModel model = getModel();
    ButtonModel model = radioButton.getModel();
    if(!model.isEnabled()) {
      setForeground(Color.GRAY);
      radioButton.setForeground(Color.GRAY);
    }else if(model.isPressed() && model.isArmed()) {
      setForeground(pressedColor);
      radioButton.setForeground(pressedColor);
    }else if(model.isSelected()) {
      setForeground(selectedColor);
      radioButton.setForeground(selectedColor);
    }else if(isRolloverEnabled() && model.isRollover()) {
      setForeground(rolloverColor);
      radioButton.setForeground(rolloverColor);
    }else{
      setForeground(defaultColor);
      radioButton.setForeground(defaultColor);
    }
  }
});
}}

----
アイコンは、setPressedIcon、setSelectedIcon、setRolloverIconメソッドなどが用意されているので、これを使用しています。

//**参考リンク
**コメント [#sc45a72f]
- スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- [[terai]] &new{2009-06-03 (水) 21:27:13};
- スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- [[aterai]] &new{2009-06-03 (水) 21:27:13};

#comment