• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTabbedPaneでタブを追加削除
#navi(../)
*JTabbedPaneでタブを追加削除 [#t9a9869a]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2003-11-21~
更新日:&lastmod;
---
category: swing
folder: TabbedPane
title: JTabbedPaneでタブを追加削除
tags: [JTabbedPane, JPopupMenu]
author: aterai
pubdate: 2003-12-22
description: ポップアップメニューを使って、JTabbedPaneにタブを追加、削除します。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTULwZD83I/AAAAAAAAAlo/NwNuK8prCFY/s800/TabbedPane.png
---
* 概要 [#summary]
ポップアップメニューを使って、`JTabbedPane`にタブを追加、削除します。

#contents
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTULwZD83I/AAAAAAAAAlo/NwNuK8prCFY/s800/TabbedPane.png)

**概要 [#ib9777ad]
ポップアップメニューを使って、JTabbedPaneにタブを追加、削除します。
* サンプルコード [#sourcecode]
#code(link){{
JPopupMenu popup = new JPopupMenu() {
  @Override public void show(Component c, int x, int y) {
    // JDK 1.3:
    // closePageAction.setEnabled(
    //     tabs.getUI().tabForCoordinate(tabs, x, y) >= 0);
    closePageAction.setEnabled(tabs.indexAtLocation(x, y) >= 0);
    closeAllAction.setEnabled(tabs.getTabCount() > 0);
    closeAllButActiveAction.setEnabled(tabs.getTabCount() > 0);
    super.show(c, x, y);
  }
};
}}

#screenshot
* 解説 [#explanation]
上記のサンプルでは`JPopupMenu`から`JTabbedPane`にタブの追加、削除などが実行可能です。

**サンプルコード [#o2e3e984]
 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);
   
   //int num = tab.getUI().tabForCoordinate(tab, e.getX(), e.getY());
   int num = tab.indexAtLocation(e.getX(), e.getY()); //1.4以上なら
   action = new ClosePageAction(MENUITEM_CLOSEPAGE, null);
   action.setEnabled(num>0?true:false);
   //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());
 }
- 削除メニューは、タブタイトル上で右クリックされた場合のみ選択可
-- タブタイトル上でマウスがクリックされたかどうかは、`JDK 1.4`で導入された`JTabbedPane#indexAtLocation(...)`メソッドで判定(タブ以外の場所がクリックされた場合は`-1`が返される)

-&jnlp;
-&jar;
-&zip;
* 参考リンク [#reference]
[https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTabbedPane.html#indexAtLocation-int-int- JTabbedPane#indexAtLocation(int, int) (Java Platform SE 8)]

**解説 [#k9a59fc8]
上記のサンプルでは、ポップアップメニューから、タブの追加、削除などが行えます。
* コメント [#comment]
#comment
- スクリーンショットなどを更新 -- &user(aterai); &new{2008-03-13 (Thu) 21:58:23};

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

**コメント [#hd9a4c5d]
#comment