• title: JTabbedPaneのCloseButtonをフォーカスがある場合だけ表示 tags: [JTabbedPane, JButton, Focus] author: aterai pubdate: 2008-01-21T15:27:41+09:00 description: JTabbedPaneのタブを閉じるボタンを、タブにフォーカスがある場合だけ表示します。

概要

JTabbedPaneのタブを閉じるボタンを、タブにフォーカスがある場合だけ表示します。

サンプルコード

public MyJTabbedPane() {
  super();
  setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
  addMouseMotionListener(new MouseMotionAdapter() {
    private int prev = -1;
    @Override public void mouseMoved(MouseEvent e) {
      JTabbedPane source = (JTabbedPane) e.getSource();
      int focussed = source.indexAtLocation(e.getX(), e.getY());
      if(focussed == prev) return;
      for(int i = 0; i < source.getTabCount(); i++) {
        TabPanel tab = (TabPanel) source.getTabComponentAt(i);
        tab.setButtonVisible(i == focussed);
      }
      prev = focussed;
    }
  });
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JDK 6で導入されたタブにコンポーネントを追加する機能を使って、タブ上にマウスカーソルがある場合だけJButtonを表示しています。

JButtonが表示されても、そのタブ幅は常に一定で、内部のタブタイトルがクリップされるようになっています。

参考リンク

コメント