概要

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

サンプルコード

tabbedPane.addChangeListener(e -> {
  JTabbedPane tabs = (JTabbedPane) e.getSource();
  int sindex = tabs.getSelectedIndex();
  String str = tabs.getTitleAt(sindex);
  for (int i = 0; i < tabs.getTabCount(); i++) {
    if (i == sindex && tabs.getTitleAt(sindex).endsWith("1")) {
      tabs.setForegroundAt(i, Color.GREEN);
    } else if (i == sindex) {
      Color sc = (sindex % 2 == 0) ? Color.RED : Color.BLUE;
      tabs.setForegroundAt(i, sc);
    } else {
      tabs.setForegroundAt(i, Color.BLACK);
    }
  }
});
View in GitHub: Java, Kotlin

解説

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

  • タブ文字色: JTabbedPane#setForegroundAt(Color)
  • タブ背景色: JTabbedPane#setBackgroundAt(Color)
    • Look and Feelに依存する(JDK 1.7.0からドキュメントに追記された)
    • 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@");
// ...

参考リンク

コメント