gpt4 book ai didi

java - 为什么 Java 中的所有中间点击都报告为具有 Alt 修饰符?

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:43 25 4
gpt4 key购买 nike

为什么 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 键。这是有据可查的,在 MouseEvent 的 Javadocs 中甚至有一行提到了这种重叠。但我的问题是,为什么会这样报道?中间点击从 e.isAltDown() 返回 true 的原因是什么?

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

同样,在 Java 中是否有设计跨平台鼠标行为的“最佳实践”指南?

最佳答案

我相信这种重新使用标志是出于历史原因。我只能猜测最初的动机,但可能没有使用太多位,以便为将来的扩展保留更多位。另一个可能是 Mac 只有一个鼠标的事实,因此 Mac 上(现在仍然)常用修饰符来表示人们通常会在具有足够数量的系统上使用不同鼠标按钮的东西。

从 Java 1.4 开始,我宁愿使用 getModifiersEx它将分别报告这些修饰符和按钮。所以信息是可用的,只是为了保持向后兼容性而不是通过旧界面报告。

关于java - 为什么 Java 中的所有中间点击都报告为具有 Alt 修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15255557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com