У меня есть некоторые классы, необходимые для перехода от старого устаревшего вызова: MouseEvent getModifiers ()
, которые необходимо преобразовать в новый стиль: MouseEvent getModifiersEx ()
Нажатие на фрейм в примере вызывает слушатель мыши. Обратите внимание, что (устарело) getModifiers () дает ожидаемые результаты для rt-click против lt-click:
right click: 4, left click: 16
Это показывает, что rt-click отличается от lt-click и значения битов соответствуют ожидаемым .
Однако использование getModifiersEx () не показывает ожидаемые значения.
Ожидаемые битовые значения для getModifiersEx:
right click: 4096, left click: 1024
Но фактические значения:
right click: 0, left click: 0
Это делает rt-click vs lt-click неразличимым.
Обратите внимание, что нажатие клавиш-модификаторов (например, Shift, Cntrl, Alt) действительно устанавливает ожидаемые биты (но биты маски при нажатии кнопки по-прежнему равны нулю, поэтому щелчок правой кнопкой мыши по сравнению с щелчком мыши по-прежнему неразличим)
Вызов MouseEvent getButton () возвращает правильную кнопку, так что это обходной путь. Но почему getModifiersEx () не работает?
Это на MacOS BTW
/**Example showing issue with MouseEvent.getModifiersEx()*/
public class TrialGetModEx extends JFrame {
public TrialGetModEx() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setLocation(100,100);
setVisible(true);
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.print("Mod="+e.getModifiers());
System.out.print(" ModEx="+e.getModifiersEx());
System.out.println();
}
});
System.out.println("Expected Bit values:");
System.out.println(" BUTTON_1_MASK: "+MouseEvent.BUTTON1_MASK);
System.out.println(" BUTTON_3_MASK: "+MouseEvent.BUTTON3_MASK);
System.out.println(" BUTTON_1_DOWN_MASK: "+MouseEvent.BUTTON1_DOWN_MASK);
System.out.println(" BUTTON_3_DOWN_MASK: "+MouseEvent.BUTTON3_DOWN_MASK);
}
public static void main(String[] args) {
new TrialGetModEx();
}
}