概要

JTabbedPaneでタブ選択の履歴を保存し、これを参照して現在選択されているタブを閉じた後に選択するタブを決定します。

サンプルコード

JTabbedPane tabbedPane = new JTabbedPane() {
  private final List<Component> history = new ArrayList<>(5);

  @Override public void setSelectedIndex(int index) {
    super.setSelectedIndex(index);
    Component component = getComponentAt(index);
    history.remove(component);
    history.add(0, component);
  }

  @Override public void removeTabAt(int index) {
    Component component = getComponentAt(index);
    super.removeTabAt(index);
    history.remove(component);
    if (!history.isEmpty()) {
      setSelectedComponent(history.get(0));
    }
  }
};
View in GitHub: Java, Kotlin

解説

  • デフォルト(右隣りのタブに移動)
    • JTabbedPaneで現在選択されているタブをJTabbedPane#removeTabAt(int)で閉じた場合、その後に選択されるタブは右隣(縦の場合は下)のタブで固定
      • 一番最後のタブが選択されていた場合はJTabbedPane#getTabCount() - 1
  • 以前選択されていたタブに移動
    • 上記のサンプルではJTabbedPane#setSelectedIndex(int)をオーバーライドして選択の履歴を保存
    • JTabbedPane#removeTabAt(int)をオーバーライドし、履歴からその前に選択されていたタブを検索して選択状態を設定

参考リンク

コメント