JButtonがクリックされたときにShiftキーなどが押下されているかをテストする
Total: 5171, Today: 2, Yesterday: 2
Posted by aterai at
Last-modified:
Summary
JButtonやJMenuItemがクリックされたとき、同時にShiftキーなどが押下されているかをテストします。
Screenshot

Advertisement
Source Code Examples
JButton button = new JButton("TEST: ActionEvent#getModifiers()");
button.addActionListener(e -> {
// BAD EXAMPLE: boolean isShiftDown = (e.getModifiers() & InputEvent.SHIFT_MASK) != 0;
// Always use ActionEvent.*_MASK instead of InputEvent.*_MASK in ActionListener
boolean isShiftDown = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
if (isShiftDown) {
LOGGER.info("JButton: Shift is Down");
} else {
LOGGER.info("JButton: Shift is Up");
}
if ((e.getModifiers() & AWTEvent.MOUSE_EVENT_MASK) != 0) {
LOGGER.info("JButton: Mouse event mask");
}
});
View in GitHub: Java, KotlinDescription
JButton+ActionListener(e.getModifiers() & ActionEvent.SHIFT_MASK) != 0でShiftキーが押されているかを判断するActionListener内で(e.getModifiers() & InputEvent.SHIFT_MASK) != 0とInputEvent.SHIFT_MASKを使用すべきではない- どちらも定数値は
1だがInputEvent.SHIFT_MASKはキーストローク用、またJava 9からInputEvent.SHIFT_MASKは非推奨でInputEvent.SHIFT_DOWN_MASKを使うべき InputEvent.SHIFT_DOWN_MASKはInputEvent.getModifiersEx()と合わせて使用するMouseEventやKeyEventはInputEventを継承しているが、ActionEventは継承していないのでgetModifiersEx()メソッドは存在しない- ActionEvent.SHIFT_MASK:
1 - InputEvent.SHIFT_MASK:
1@Deprecated(since="9") - InputEvent.SHIFT_DOWN_MASK:
64
- ActionEvent.SHIFT_MASK:
JTextField+InputMap、またはKeyListener、MouseListener(e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0でShiftキーが押されているかを判断するMouseEventはInputEventを継承しているので、MouseListener内ではInputEvent#isShiftDown()なども使用可能
JMenuItemなどがキー入力ではなくマウスでクリックされたかどうかは(ActionEvent#getModifiers() & AWTEvent.MOUSE_EVENT_MASK) != 0で判断可能
Reference
- ActionEvent (Java Platform SE 8)
- java - isShiftDown when JButton pressed? - Stack Overflow
- <AWT Dev> creating an ActionEvent with modifiers from an InputEvent