TITLE:JRadioButtonの文字色を変更
Posted by 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: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTRa2rE0nI/AAAAAAAAAhI/A6NX-uUoYjM/s800/RadioButtonTextColor.png

概要

JRadioButtonの状態の変化に応じて、その文字色やアイコンを変更します。
RadioButtonTextColor.png

サンプルコード

サンプルコード

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
  }
  // ...
View in GitHub: Java, Kotlin

解説

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

解説

上記のサンプルでは、JRadioButtonが選択やロールオーバーした時の文字色をマウスリスナーではなくAbstractButton#fireStateChanged()メソッドをオーバーライドして変更しています。 アイコンは、setPressedIcon、setSelectedIcon、setRolloverIconメソッドなどが用意されているので、これを使用しています。
  • - 以下のような、ChangeListenerを使用する方法もあります。
  • 文字色ではなくアイコンを変更する場合はsetPressedIcon(...)setSelectedIcon(...)setRolloverIcon(...)メソッドが使用可能
  • 以下のようなChangeListenerを使用する方法もある
    #spandel
    radioButton.addChangeListener(new javax.swing.event.ChangeListener() {
    #spanend
      public void stateChanged(javax.swing.event.ChangeEvent e) {
    #spanadd
    radioButton.addChangeListener(new ChangeListener() {
    #spanend
      @Override public void stateChanged(ChangeEvent e) {
        ButtonModel model = radioButton.getModel();
        if(!model.isEnabled()) {
        if (!model.isEnabled()) {
          radioButton.setForeground(Color.GRAY);
        }else if(model.isPressed() && model.isArmed()) {
        } else if (model.isPressed() && model.isArmed()) {
          radioButton.setForeground(pressedColor);
        }else if(model.isSelected()) {
        } else if (model.isSelected()) {
          radioButton.setForeground(selectedColor);
        }else if(isRolloverEnabled() && model.isRollover()) {
        } else if (isRolloverEnabled() && model.isRollover()) {
          radioButton.setForeground(rolloverColor);
        }else{
        } else {
          radioButton.setForeground(defaultColor);
        }
      }
    });
    

コメント

  • スクリーンショットのタイトルボーダーが入れ替わっていたのを修正。 -- aterai

参考リンク

コメント