В чем разница между BUTTON1_MASK и BUTTON1_DOWN_MASK?
С веб-сайта Java:
BUTTON1_DOWN_MASK = The Mouse Button1 extended modifier constant.
BUTTON1_MASK = The Mouse Button1 modifier constant.
Я даже не уверен, что такое "константа модификатора". Не говоря уже о расширенном. Я понимаю, однако, что BUTTON1_MASK
это просто целочисленное представление для нажатия левой кнопки мыши.
2 ответа
BUTTON1_MASK
является маской, обозначающей событие, пришедшее от кнопки 1. BUTTON1_DOWN_MASK
концептуально похож, но является расширенной версией этой константы.
Есть два метода, которые возвращают такие наборы констант: InputEvent#getModifiers()
а также InputEvent#getModifiersEx()
, и они будут возвращать константы-модификаторы или расширенные константы-модификаторы соответственно.
Из документов (жирным шрифтом является мое):
Маска кнопки, возвращенная функцией InputEvent.getModifiers(), отражает только кнопку, состояние которой изменилось, а не текущее состояние всех кнопок... Чтобы получить состояние всех кнопок и клавиш-модификаторов, используйте InputEvent.getModifiersEx().
Расширенные модификаторы представляют состояние всех модальных клавиш, таких как ALT, CTRL, META и кнопки мыши сразу после того, как произошло событие
Например, если пользователь нажимает кнопку 1, а затем кнопку 2, а затем отпускает их в том же порядке, генерируется следующая последовательность событий:
MOUSE_PRESSED: BUTTON1_DOWN_MASK MOUSE_PRESSED: BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK MOUSE_RELEASED: BUTTON2_DOWN_MASK MOUSE_CLICKED: BUTTON2_DOWN_MASK MOUSE_RELEASED: MOUSE_CLICKED:
Если все, что вам нужно, это обнаружить нажатие кнопки 1 (обычно левой кнопкой мыши), то любой из них должен работать:
if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) != 0) {
System.out.println("BUTTON1_MASK");
}
if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0) {
System.out.println("BUTTON1_DOWN_MASK");
}
Кроме того, вы можете проверить эту версию с открытым исходным кодом InputEvent
, который имеет еще несколько полезных комментариев и показывает, что происходит внутри
Как утверждают документы, BUTTON1_MASK
а также BUTTON1_DOWN_MASK
являются константами-модификаторами, т.е. они используются в сочетании с MouseEvent#getModifiers
, Они не расширяются, а используются как значения маски, например
@Override
public void mousePressed(MouseEvent me) {
if ((me.getModifiers() & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) {
System.out.println("Left button pressed.");
}
}
BUTTON1_DOWN_MASK
используется для определения состояния кнопки мыши, тогда как BUTTON1_MASK
просто помогает определить, какая кнопка нажата.