JTabbedPaneのタブをマウスの中ボタンクリックで閉じる
Total: 2605
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTabbedPane
のタブをマウスの中(ホイール)ボタンクリックなどで閉じるよう設定します。
Screenshot
Advertisement
サンプルコード
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
ボタンの場合タブを閉じる
参考リンク
- InputEvent#getMaskForButton(int) (Java Platform SE 8)
- MouseInfo#getNumberOfButtons() (Java Platform SE 8)