Perché i mouseEvents in Java condividono modificatori tra i tasti e i pulsanti del mouse?Perché tutti i clic intermedi in Java sono segnalati come aventi il modificatore Alt?
Si consideri, il semplice codice qui sotto:
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);
}
Se si fa clic su tre volte nella finestra (un clic sinistro, un tasto centrale, e uno destro del mouse) si vedrà il seguente output.
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
Se si guarda, si noterà che tutti i clic intermedi sono riportati come avere il tasto Alt, e tutti i clic destro sono riportati come avere il tasto Meta verso il basso. Questo è ben documentato, e c'è anche una riga in Javadocs per MouseEvent che menziona questa sovrapposizione. Ma la mia domanda è: perché è riportato in questo modo? Qual è il ragionamento alla base della restituzione di true da e.isAltDown() per un clic intermedio?
Ciò rende difficile distinguere tra Alt + Button1 e Button2 su alcune piattaforme.
Analogamente, esistono guide "Best Practices" per la progettazione di comportamenti di mouse multipiattaforma in Java?
Mac. O altri sistemi che potrebbero utilizzare mouse a un solo pulsante. – GSP