TITLE:JTabbedPaneのタブを固定する
#navi(../)
RIGHT:Posted by [[aterai]] at 2011-12-05
*JTabbedPaneのタブを固定する [#j14c1072]
JTabbedPaneにJPopupMenuを追加して、指定したタブのタイトルと位置を変更し、タブの固定を行います。

-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(https://lh4.googleusercontent.com/-QqKPFV0ZzIc/TttWYFUshII/AAAAAAAABFk/6HcCBI_bg-0/s800/PinTabbedPane.png)

**サンプルコード [#k9852cde]
#code{{
JCheckBoxMenuItem 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.length()==0) continue;
        break;
      }
    }else{
      for(i=t.getTabCount()-1;i>idx;i--) {
        String s = t.getTitleAt(i);
        if(s!=null && s.length()>0) 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);
  }
});
}}

**解説 [#yfe02b48]
- タブを固定
-- タブタイトルを空にする
-- タブの位置を左に移動
-- 固定したタブは削除しない
- タブの固定を解除
-- タブタイトルをTooltipTextから復元する
-- タブの位置を固定されていないタブの右側に移動
- 注
-- TabPlacement: LEFT, RIGHT は考慮していない

//**参考リンク
**コメント [#bdee84c0]
#comment