JTabbedPaneにタブを閉じるアイコンを追加

編集者:Terai Atsuhiro
作成日:2006-03-20
更新日:2021-04-17 (土) 02:57:33

概要

JTabbedPaneにタブを閉じるためのアイコンやボタンを追加します。以下の参考リンクから引用したコードをほぼそのまま引用して紹介しています。

#screenshot

サンプルコード

public class JTabbedPaneWithCloseIcons extends JTabbedPane {
  public JTabbedPaneWithCloseIcons() {
    super();
    addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        tabClicked(e);
      }
    });
  }
  public void addTab(String title, Component component) {
    this.addTab(title, component, null);
  }
  public void addTab(String title, Component component, Icon extraIcon) {
    super.addTab(title, new CloseTabIcon(extraIcon), component);
  }
  private void tabClicked(MouseEvent e) {
    int index = getUI().tabForCoordinate(this, e.getX(), e.getY());
    if(index<0) return;
    Rectangle rect=((CloseTabIcon)getIconAt(index)).getBounds();
    if(rect.contains(e.getX(), e.getY())) {
      removeTabAt(index);
    }
  }
}
  • &jnlp;
  • &jar;
  • &zip;

解説

  • 上:JTabbedPaneWithCloseButton TabbedPaneLayoutを使用して、ボタンをタブの中にレイアウトしています。
  • 中:JTabbedPaneWithCloseIcons JTabbedPaneには、タブにアイコンを表示する機能があるので、これを利用しています。タブのクリックされた位置がアイコン上かどうかで、そのタブを閉じるかどうかを判断しています。
  • 下:CloseableTabbedPane JTabbedPaneWithCloseIconsの改良版です。アイコンの位置、マウスがアイコン上に来たときの描画機能などが追加されています。

上記のサンプルコードは、一番簡単なJTabbedPaneWithCloseIconsのものを掲載しています。

Java SE 6 Mustangの新機能には、「JTabbedPaneのタブ部分に、文字列・アイコンに加えSwingコンポーネントを使えるように改善」とあるのでこれを利用すればもっと簡単に実現できるようになるかもしれません。

参考リンク

コメント