• category: swing folder: MaskForButton title: JTabbedPaneのタブをマウスの中ボタンクリックで閉じる tags: [JTabbedPane, MouseListener, InputEvent] author: aterai pubdate: 2018-06-18T16:22:26+09:00 description: JTabbedPaneのタブをマウスの中(ホイール)ボタンクリックなどで閉じるよう設定します。 image: https://drive.google.com/uc?id=1vZI_GTDVvkzH3DmnWXC2h1NPU1mSmuBzGQ

概要

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

サンプルコード

tabbedPane.addMouseListener(new MouseAdapter() {
  @Override public void mouseClicked(MouseEvent e) {
    int button = e.getButton();
    boolean isB1Double = e.getClickCount() == 2 && button == 1;
    boolean isB2Down = MouseInfo.getNumberOfButtons() > 2 && button == 2;
    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ボタンの場合タブを閉じる

参考リンク

コメント