Swing/PinTabbedPane の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/PinTabbedPane へ行く。
- Swing/PinTabbedPane の差分を削除
--- category: swing folder: PinTabbedPane title: JTabbedPaneのタブを固定する tags: [JTabbedPane, JPopupMenu, JLabel] author: aterai pubdate: 2011-12-05T14:18:41+09:00 description: JTabbedPaneにJPopupMenuを追加して、指定したタブのタイトルと位置を変更し、タブの固定を行います。 image: https://lh4.googleusercontent.com/-QqKPFV0ZzIc/TttWYFUshII/AAAAAAAABFk/6HcCBI_bg-0/s800/PinTabbedPane.png --- * 概要 [#summary] `JTabbedPane`に`JPopupMenu`を追加して、指定したタブのタイトルと位置を変更し、タブの固定を行います。 #download(https://lh4.googleusercontent.com/-QqKPFV0ZzIc/TttWYFUshII/AAAAAAAABFk/6HcCBI_bg-0/s800/PinTabbedPane.png) * サンプルコード [#sourcecode] #code(link){{ pinTabMenuItem = new JCheckBoxMenuItem(new AbstractAction("pin tab") { @Override public void actionPerformed(ActionEvent e) { JTabbedPane t = (JTabbedPane) getInvoker(); JCheckBoxMenuItem check = (JCheckBoxMenuItem) e.getSource(); int idx = t.getSelectedIndex(); Component cmp = t.getComponentAt(idx); Component tab = t.getTabComponentAt(idx); Icon icon = t.getIconAt(idx); String tip = t.getToolTipTextAt(idx); boolean flg = t.isEnabledAt(idx); int i; if (check.isSelected()) { for (i = 0; i < idx; i++) { String s = t.getTitleAt(i); if (s == null || s.isEmpty()) { continue; } break; } } else { for (i = t.getTabCount() - 1; i > idx; i--) { String s = t.getTitleAt(i); if (s != null && !s.isEmpty()) { continue; } break; } } t.remove(idx); t.insertTab(check.isSelected() ? "" : tip, icon, cmp, tip, i); t.setTabComponentAt(i, tab); t.setEnabledAt(i, flg); if (flg) { t.setSelectedIndex(i); } } }); }} * 解説 [#explanation] - タブを固定 -- タブタイトルを空にする -- タブの位置を左側に移動 -- 固定したタブは削除不可 -- タブの位置を最も左に存在する未固定タブの左隣りに移動 -- 固定したタブは削除不可に設定 - タブの固定を解除 -- タブタイトルを`TooltipText`から復元する -- タブの位置を固定されていないタブの右側に移動 -- タブの位置を最も左に存在する未固定タブの右隣りに移動 - `TabPlacement`の`LEFT`、`RIGHT`は考慮していない * 参考リンク [#reference] - [https://xp-style-icons.en.softonic.com/ XP Style Icons - Download] * コメント [#comment] #comment #comment