Определить, нажата ли средняя кнопка мыши, но не клавиша alt
Я экспериментировал с java.awt.event.MouseEvent
и кнопки мыши и клавиши-модификаторы. Наконец я пришел к точке, где меня смутило его поведение.
Обычно я использую SwingUtilities.isLeftMouseButton(...)
и т.д., чтобы определить, какая кнопка мыши нажата и <MouseEvent>.isControlDown()
и т.д., чтобы определить, какая клавиша-модификатор нажата.
Но если я нажму среднюю кнопку мыши, <MouseEvent>.isAltDown()
-метод, кажется, всегда верен, независимо от того, нажата ли клавиша Alt или нет (кстати, одинаково для правой кнопки мыши и мета-клавиши).
Кажется, что некоторые клавиши на клавиатуре имеют те же флаги событий, что и некоторые кнопки мыши. Как получить среднюю кнопку мыши в Java? кажется, чтобы подтвердить мое предположение.
Итак, мой вопрос: есть ли способ определить, какая кнопка мыши нажата, а какие модификаторы действительно нажаты? Или лучше использовать только клавиши-модификаторы Ctrl и Shift для условных событий мыши?
ОС: Windows 8, Java-версия "1.7.0_09"
заранее спасибо
1 ответ
Что касается вашей проблемы со средней кнопкой мыши... http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6495530, может показаться, что Sun/Oracle знает об этой проблеме с 2006 года...
Для других случаев (хотя бы простых) я делаю следующее.
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON2){
//Do some stuff...
if (e.isControlDown()) {
//Do something if control is down
}else{
//Something different if it is not down.
}
}
}
Есть аналогичный помощник для alt (который не работает со средней кнопкой, это всегда true), shift и meta (это клавиша OS X?).
Я заметил странное поведение, если вы хотите обрабатывать двойные щелчки и отдельные щелчки отдельно, поскольку Java, кажется, учитывает двойной щелчок, но обрабатывает и один щелчок.