Swing/MaskForButton のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MaskForButton へ行く。
- 1 (2018-07-09 (月) 17:23:06)
- 2 (2020-07-03 (金) 19:22:41)
- 3 (2021-12-04 (土) 09:24:47)
- 4 (2024-06-17 (月) 01:53:34)
- 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
のタブをマウスの中(ホイール)ボタンクリックなどで閉じるよう設定します。
Screenshot
Advertisement
サンプルコード
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
ボタンの場合、タブを閉じる
参考リンク
- InputEvent#getMaskForButton(int) (Java Platform SE 8)
- MouseInfo#getNumberOfButtons() (Java Platform SE 8)