概要

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

サンプルコード

JTabbedPane tabbedPane = new JTabbedPane() {
  private final List<Component> history = new ArrayList<Component>(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 all

解説

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

コメント