TITLE:JTabbedPaneのタブを固定する

Posted by aterai at 2011-12-05

JTabbedPaneのタブを固定する

JTabbedPaneにJPopupMenuを追加して、指定したタブのタイトルと位置を変更し、タブの固定を行います。

  • &jnlp;
  • &jar;
  • &zip;
PinTabbedPane.png

サンプルコード

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);
  }
});

解説

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

コメント