为什么Java中的所有鼠标中键都报告有Alt修饰符?

为什么Java中的所有鼠标中键都报告有Alt修饰符?,java,swing,awt,mouse,Java,Swing,Awt,Mouse,为什么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) {

为什么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);
}
如果在窗口中单击三次(一次左键单击、一次中键单击和一次右键单击),您将看到以下输出

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键按下。这是有很好的文档记录的,Javadocs for MouseEvent中甚至有一行提到了这种重叠。但我的问题是,为什么会有这样的报道?从e.isAltDown()返回true进行中键单击的原因是什么

这使得在某些平台上很难区分Alt+Button1和Button2


类似地,Java中是否有设计跨平台鼠标行为的“最佳实践”指南

我认为重新使用国旗是出于历史原因。我只能猜测最初的动机,但人们可能没有使用太多的位,以便为将来的扩展保留更多的位。另一个可能是Mac只有一个鼠标,所以修改器在Mac上(现在仍然)常用来表示在有足够数量鼠标的系统上通常使用不同鼠标按钮的事情


由于Java1.4,我宁愿使用它来分别报告这些修饰符和按钮。因此信息是可用的,只是为了保持向后兼容性而不通过旧界面报告。

Macs。或者其他可能使用一键鼠标的系统。我希望了解更多关于原始动机的设计要求。