Swing/TabbedPane のバックアップの現在との差分(No.15)
TITLE:JTabbedPaneでタブを追加削除
JTabbedPaneでタブを追加削除
編集者:Terai Atsuhiro~
作成日:2003-11-21
更新日:2024-01-27 (土) 14:37:42
概要
ポップアップメニューを使って、JTabbedPane
にタブを追加、削除します。
Screenshot
Advertisement
概要
ポップアップメニューを使って、JTabbedPaneにタブを追加、削除します。サンプルコード
#spanend
#spanadd
JPopupMenu popup = new JPopupMenu() {
#spanend
@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);
}
#spanadd
};
#spanend
#spanadd
View in GitHub: Java, Kotlin#screenshot
解説
上記のサンプルではJPopupMenu
からJTabbedPane
にタブの追加、削除などが実行可能です。
サンプルコード
#spanend
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?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());
}
#spandel
- &jnlp;
- &jar;
- &zip;
- 削除メニューは、タブタイトル上で右クリックされた場合のみ選択可
- タブタイトル上でマウスがクリックされたかどうかは、
JDK 1.4
で導入されたJTabbedPane#indexAtLocation(...)
メソッドで判定(タブ以外の場所がクリックされた場合は-1
が返される)
- タブタイトル上でマウスがクリックされたかどうかは、
解説
上記のサンプルでは、ポップアップメニューから、タブの追加、削除などが行えます。参考リンク
JTabbedPane#indexAtLocation(int, int) (Java Platform SE 8) 削除メニューは、タブタイトル上で右クリックされた場合のみ選択可となります。タブタイトル上でマウスがクリックされたかどうかは、JTabbedPane.indexAtLocationメソッドで判定しています。コメント
- スクリーンショットなどを更新 -- aterai