为什么 Java 中的 MouseEvents 在键和鼠标按钮之间共享修饰符?
考虑一下下面的简单代码:
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);
}
如果在窗口中单击 3 次(左键单击、中键单击和右键单击),您将看到以下输出。
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
如果你看,你会注意到所有的中间点击都被报告为按下了 alt 键,所有的右键点击被报告为按下了 Meta 键。这是有据可查的,甚至在 MouseEvent 的 Javadocs 中也有一行提到了这种重叠。但我的问题是,为什么会这样报道?从 e.isAltDown() 返回 true 以进行中间点击的原因是什么?
这使得在某些平台上很难区分 Alt+Button1 和 Button2。
同样,是否有任何“最佳实践”指南用于在 Java 中设计跨平台鼠标行为?