• category: swing folder: ColorTab title: JTabbedPaneの選択文字色を変更 tags: [JTabbedPane, ChangeListener] author: aterai pubdate: 2004-02-09 description: JTabbedPaneで、選択されたタブの文字色を変更します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTJo7nZnbI/AAAAAAAAAUs/6SU2JG2B0t0/s800/ColorTab.png

概要

JTabbedPaneで、選択されたタブの文字色を変更します。

サンプルコード

tab.addChangeListener(new ChangeListener() {
  @Override public void stateChanged(ChangeEvent e) {
    JTabbedPane jtab = (JTabbedPane) e.getSource();
    int sindex = jtab.getSelectedIndex();
    String str = jtab.getTitleAt(sindex);
    for (int i = 0; i < jtab.getTabCount(); i++) {
      if (i == sindex && jtab.getTitleAt(sindex).endsWith("1")) {
        jtab.setForegroundAt(i, Color.GREEN);
      } else if (i == sindex) {
        Color sc = (sindex % 2 == 0) ? Color.RED : Color.BLUE;
        jtab.setForegroundAt(i, sc);
      } else {
        jtab.setForegroundAt(i, Color.BLACK);
      }
    }
  }
});
View in GitHub: Java, Kotlin

解説

JTabbedPaneChangeListenerを追加し、条件によってタブの文字色を変更しています。

背景色も変更したかったのですが、Look and Feelなどによってはうまくいかないようです。Windows XPでタブの背景色を変更したい場合は、以下のようにSystem.setProperty("swing.noxp", "true")とする必要があります。

public static void createAndShowGUI() {
  System.setProperty("swing.noxp", "true");
  try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } catch (Exception e) {
    throw new InternalError(e.toString());
  }
  JFrame frame = new JFrame("@title@");
//......

文字色もSynth(Nimbus)LookAndFeelなどでは、JTabbedPane#setForegroundAt(...)で変更することができないようです。

参考リンク

コメント