MouseEventから取得したマウスボタンのクリック状態を視覚化する
Total: 10, Today: 9, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
MouseEventから各マウスボタンのクリック状態を取得し、図形を組み合わせて作成したマウス型のIcon上に描画することで視覚化します。
Screenshot

Advertisement
Source Code Examples
enum MouseButton {
LEFT, MIDDLE, RIGHT
}
// ...
visualizerLabel.addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
updateButton(e, true);
}
@Override public void mouseReleased(MouseEvent e) {
updateButton(e, false);
}
});
// ...
private void updateButton(MouseEvent e, boolean isPressed) {
MouseButton btn = null;
if (SwingUtilities.isLeftMouseButton(e)) {
btn = MouseButton.LEFT;
} else if (SwingUtilities.isMiddleMouseButton(e)) {
btn = MouseButton.MIDDLE;
} else if (SwingUtilities.isRightMouseButton(e)) {
btn = MouseButton.RIGHT;
}
if (btn != null) {
if (isPressed) {
pressedButtons.add(btn);
} else {
pressedButtons.remove(btn);
}
logEvent((isPressed ? "Pressed: " : "Released: ") + btn);
visualizerLabel.repaint();
}
}
View in GitHub: Java, KotlinDescription
- 上部:
JLabelJLabelにMouseListenerを追加し、マウスボタンのクリックイベントを取得可能に設定- 図形を組み合わせてマウス型の
Iconを作成し、上記のJLabelに設定 - どのボタンがクリックされたかは
MouseEvent#getButton()がBUTTON1、BUTTON2、BUTTON3かを調べる方法や、InputEvent#getModifiersEx()で取得したキー状態int modifiersが(modifiers & InputEvent.BUTTON1_MASK) != 0のようにBUTTON1_MASK、BUTTON2_MASK、BUTTON3_MASKフラグが立っているかなどで調査する方法があるが、このサンプルではSwingUtilitiesに用意された以下のメソッドを使用して判別している - マウスボタンが押されたかリリースされたかは
boolean isPressed = e.getID() == MouseEvent.MOUSE_PRESSED;で調査可能だが、このサンプルではMouseListener#mousePressed(...)かMouseListener#mouseReleased(...)のどちらでMouseEventを受け取ったかで判断している enumでMouseButtonを作成し、EnumSet<MouseButton>で各マウスボタンのクリック状態を管理することでマウスボタンの同時押しを視覚化可能にしている- マウス型アイコンは以下の図形を組み合わせて作成
- 本体は
RoundRectangle2Dのランウド矩形で作成 - 左マウスボタンは上左半分の
Rectangleと本体の共通エリアをArea#intersect(bodyArea)で抜き出すことで作成 - 右マウスボタンは上右半分の
Rectangleと本体の共通エリアをArea#intersect(bodyArea)で抜き出すことで作成 - 中央マウスボタンは
RoundRectangle2Dで作成したランウド矩形を本体上半分の中央に上書きで配置することで表現
- 本体は
- 下部:
JTextArea- How to Write a Mouse Listener (The Java™ Tutorials > Creating a GUI With Swing > Writing Event Listeners)のデモと同様に
JTextAreaにマウスイベントのログを追記している
- How to Write a Mouse Listener (The Java™ Tutorials > Creating a GUI With Swing > Writing Event Listeners)のデモと同様に
Reference
- MouseEvent (Java Platform SE 8)
- How to Write a Mouse Listener (The Java™ Tutorials > Creating a GUI With Swing > Writing Event Listeners)
- SwingUtilities#isLeftMouseButton(MouseEvent) (Java Platform SE 8)
- SwingUtilities#isRightMouseButton(MouseEvent) (Java Platform SE 8)
- SwingUtilities#isMiddleMouseButton(MouseEvent) (Java Platform SE 8)