• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTabbedPaneでタブを追加削除
#navi(../)
RIGHT:Posted by &author(aterai); at 2003-11-21
*JTabbedPaneでタブを追加削除 [#t9a9869a]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2003-11-21~
更新日:&lastmod;

#contents

**概要 [#ib9777ad]
ポップアップメニューを使って、JTabbedPaneにタブを追加、削除します。

#screenshot

**サンプルコード [#o2e3e984]
#code{{
private void showTabPop(MouseEvent e) {
  JPopupMenu pop = new JPopupMenu();
  AbstractAction action = new NewTabAction(MENUITEM_NEWTAB, null);
  pop.add(action);
  pop.addSeparator();
  action = new ClosePageAction(MENUITEM_CLOSEPAGE, null);
  
  //1.4以下の場合なら
  //int num = tab.getUI().tabForCoordinate(tab, e.getX(), e.getY());
  int num = tab.indexAtLocation(e.getX(), e.getY());
  action = new ClosePageAction(MENUITEM_CLOSEPAGE, null);
  action.setEnabled(num>0);
  //boolean flg = false;
  //for(int i=0;i<tab.getTabCount();i++) {
  //  if(tab.getBoundsAt(i).contains(e.getPoint())) {
  //    flg = true;
  //    break;
  //  }
  //}
  //action.setEnabled(flg);
  pop.add(action);
  pop.addSeparator();
  action = new CloseAllAction(MENUITEM_CLOSEALL, null);
  pop.add(action);
  action = new CloseAllButActiveAction(MENUITEM_CLOSEALLBUTACTIVE, null);
  pop.add(action);
  pop.show(tab, e.getX(), e.getY());
}
}}
-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTULwZD83I/AAAAAAAAAlo/NwNuK8prCFY/s800/TabbedPane.png)

**サンプルコード [#o2e3e984]
#code(link){{
private final JPopupMenu pop = new JPopupMenu() {
  public void show(Component c, int x, int y) {
    //JDK 1.3 tabindex = tab.getUI().tabForCoordinate(tab, x, y);
    closePageAction.setEnabled(tab.indexAtLocation(x, y)>=0);
    closeAllAction.setEnabled(tab.getTabCount()>0);
    closeAllButActiveAction.setEnabled(tab.getTabCount()>0);
    super.show(c, x, y);
  }
};
}}

**解説 [#k9a59fc8]
上記のサンプルでは、ポップアップメニューから、タブの追加、削除などが行えます。
上記のサンプルでは、ポップアップメニューから、タブの追加、削除などが実行できます。

削除メニューは、タブタイトル上で右クリックされた場合のみ選択可となります。タブタイトル上でマウスがクリックされたかどうかは、JTabbedPane.indexAtLocationメソッドで判定しています。
削除メニューは、タブタイトル上で右クリックされた場合のみ選択可となります。タブタイトル上でマウスがクリックされたかどうかは、JDK 1.4 で導入された JTabbedPane#indexAtLocationメソッドで判定しています。

**コメント [#hd9a4c5d]
- スクリーンショットなどを更新 -- [[aterai]] &new{2008-03-13 (Thu) 21:58:23};

#comment