Dlaczego MouseEvents w Java modyfikatory akcji między klawiszami i przyciskami myszy?Dlaczego wszystkie kliknięcia środkowe w Javie są zgłaszane jako posiadające modyfikator Alt?
Rozważmy prosty kod poniżej:
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);
}
Jeśli klikniesz trzy razy w jednym oknie (lewym przyciskiem myszy, kliknij jeden środkowy i jeden prawy klik) zobaczysz następujący wynik.
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
Jeśli przyjrzysz, zauważysz, że wszystkie środkowe kliknięcia są zgłoszone jako posiadające klawisz alt dół, a wszyscy prawego kliknięcia są zgłoszone jako posiadające Meta klucz w dół. Jest to dobrze udokumentowane, a nawet w Javadocs dla MouseEvent jest nawet wiersz z informacją o tym nakładaniu. Ale moje pytanie brzmi: dlaczego tak się mówi? Co to jest powód powrotu true z e.isAltDown() dla środkowego kliknięcia?
To sprawia, że trudno jest odróżnić Alt + Button1 i Button2 na niektórych platformach.
Czy istnieją również przewodniki "Best Practices" do projektowania międzyplatformowych zachowań myszy w Javie?
Mac. Lub inne systemy, które mogą używać myszy jednoprzyciskowych. – GSP