概要

JTabbedPaneのタブをマウスの中(ホイール)ボタンクリックなどで閉じるよう設定します。

サンプルコード

tabbedPane.addMouseListener(new MouseAdapter() {
  @Override public void mouseClicked(MouseEvent e) {
    int button = e.getButton();
    boolean isB1Double = e.getClickCount() == 2 &&
        button == MouseEvent.BUTTON1;
    boolean isB2Down = MouseInfo.getNumberOfButtons() > 2 &&
        button == MouseEvent.BUTTON2;
    JTabbedPane tabbedPane = (JTabbedPane) e.getComponent();
    int idx = tabbedPane.indexAtLocation(e.getX(), e.getY());
    if (idx >= 0 && (isB2Down || isB1Double)) {
      tabbedPane.remove(idx);
    }
  }

  @Override public void mousePressed(MouseEvent e) {
    System.out.println("BUTTON2 mousePressed: " + Objects.toString(
      (e.getModifiersEx() & InputEvent.getMaskForButton(2)) != 0));
  }

  @Override public void mouseReleased(MouseEvent e) {
    System.out.println("BUTTON2 mouseReleased: " + Objects.toString(
      (e.getModifiersEx() & InputEvent.getMaskForButton(2)) != 0));
  }
});
View in GitHub: Java, Kotlin

解説

  • 中ボタンでクリック
    • MouseListener#mouseClicked(...)内の場合MouseEvent#getButton()で状態が変化したマウスボタンを取得しそれが第2ボタンかどうかで判断する
    • MouseListener#mousePressed(...)内ならe.getModifiersEx() & InputEvent.getMaskForButton(2)でフラグが立っているかどうかで判断可能
    • MouseInfo.getNumberOfButtons()メソッドで取得されるマウスのボタン数が2以下の場合中ボタンは無い(未検証)と判断している
  • 左ボタンでダブルクリック
    • MouseEvent#getClickCount()2、かつMouseEvent#getButton()が第1ボタンの場合タブを閉じる

参考リンク

コメント