MouseDragged не возвращает соответствующую кнопку вниз
Как узнать кнопку, нажатую из события mouseDragged
?
У меня проблема в mouseDragged()
, потому что полученный MouseEvent
возвращает 0 для getButton()
. У меня нет проблем с расположением мыши или даже с обнаружением щелчков мыши. Событие mouseClicked()
возвращает соответствующую кнопку для getButton()
.
Любые предложения о том, как я могу это сделать? Я предполагаю, что я мог бы работать с использованием mouseClicked
или mousePressed
, но я бы предпочел сохранить все это в mouseDragged
.
Спасибо за ваше время и ответы.
Ответы
Ответ 1
Как указано в комментариях и других ответах, SwingUtilities предоставляет три метода для таких случаев, которые должны работать для всех MouseEvents:
SwingUtilities.isLeftMouseButton(aMouseEvent);
SwingUtilities.isRightMouseButton(aMouseEvent);
SwingUtilities.isMiddleMouseButton(aMouseEvent);
Что касается проблемы с вашим подходом, javadoc getButton()
говорит:
Возвращает, какие кнопки кнопок мыши изменились.
Так как состояние кнопки не изменяется во время ее удержания, getButton()
обычно возвращает NO_BUTTON
в mouseDragged
. Чтобы проверить состояние кнопок и модификаторов, таких как Ctrl, Alt и т.д. В mouseDragged
, вы можете использовать getModifiersEx()
. Например, приведенный ниже код проверяет, что BUTTON1
выключен, но BUTTON2
не указан:
int b1 = MouseEvent.BUTTON1_DOWN_MASK;
int b2 = MouseEvent.BUTTON2_DOWN_MASK;
if ((e.getModifiersEx() & (b1 | b2)) == b1) {
// ...
}
Ответ 2
Якоб правильно, что getButton()
не дает вам кнопку по дизайну. Тем не менее, я нашел более чистое решение, чем бит-операции на getModifiersEx()
, которое вы также можете использовать в mouseDragged
:
if (SwingUtilities.isLeftMouseButton(theMouseEvent)) {
//do something
}
Аналогичные методы существуют для средней кнопки и правой кнопки.
Ответ 3
int currentMouseButton = -1;
@Override
public void mousePressed(MouseEvent e) {
currentMouseButton = e.getButton();
}
@Override
public void mouseReleased(MouseEvent e) {
currentMouseButton = -1;
}
@Override
public void mouseDragged(MouseEvent e) {
if (currentMouseButton == 3) {
System.out.println("right button");
}
}
Ответ 4
Возможно, это проблема с вашей песочницей java.
Следующий код работает хорошо все время (почти, как вы можете видеть).
@Override
public void mouseDragged(MouseEvent e) {
e.getButton();
}
Попробуйте код на другой машине.