Почему MouseEvents в Java используют модификаторы между клавишами и кнопками мыши?
Рассмотрим простой код ниже:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(800,600);
frame.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println(e);
}
});
frame.setVisible(true);
}
Если вы нажмете три раза в окне (один щелчок левой кнопкой мыши, один средний щелчок и один щелчок правой кнопкой мыши), вы увидите следующий вывод.
java.awt.event.MouseEvent[MOUSE_CLICKED,(165,149),absolute(165,149),button=1,modifiers=Button1,clickCount=1] on frame0
java.awt.event.MouseEvent[MOUSE_CLICKED,(292,228),absolute(292,228),button=2,modifiers=Alt+Button2,clickCount=1] on frame0
java.awt.event.MouseEvent[MOUSE_CLICKED,(293,228),absolute(293,228),button=3,modifiers=Meta+Button3,clickCount=1] on frame0
Если вы посмотрите, вы заметите, что все средние клики сообщаются как имеющие альт-ключ вниз, и все правые клики сообщаются как имеющие мета-ключ вниз. Это хорошо документировано, и в Javadocs для MouseEvent есть даже строка, в которой упоминается это перекрытие. Но мой вопрос в том, почему это так сказано? Какова причина возврата true из e.isAltDown() за средний клик?
Это затрудняет различие между Alt + Button1 и Button2 на некоторых платформах.
Точно так же существуют ли руководства "Лучшие практики" для разработки кросс-платформенного поведения мыши в Java?