gpt4 book ai didi

java - 单次按键的多个 KEY_PRESSED 事件(等于 '=' 键)

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:57 25 4
gpt4 key购买 nike

当我输入 Command-equals (⌘=) 时,我在使用 Java 7(更新 67)的 OS X 中看到了这一点。这是一个例子:

public class Test implements KeyEventDispatcher {

public Test() {
JFrame frame = new JFrame();
frame.setSize(200, 200);
frame.setVisible(true);
}



public static void main(String[] args) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new Test());
}



@Override
public boolean dispatchKeyEvent(KeyEvent ke) {
System.out.println(ke);
return false;
}
}

我看到的 ⌘= 的输出。注意,三个KEY_PRESSED事件,全部为=,没有KEY_RELEASED事件为=。另请注意,第二个指示 keyChar 为 + 以及完全缺少 KEY_TYPED 事件。

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='+',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0

多个事件确实传播到监听器、绑定(bind)或菜单加速器,这就是我最初发现该问题的方式。

为了进行比较,这是 ⌘- 的输出。没有多个事件,但仍然没有 KEY_TYPED 事件。

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=45,keyText=-,keyChar='-',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0

最后,这是 Java 6 中 ⌘= 的输出:

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0

我尚未找到任何与此相关的错误报告。对此有什么解释吗?作为一种解决方法,我所能想到的就是忽略这些基于时间戳的多个事件。

最佳答案

Oracle网站上的相关错误报告是here .

这个bug的原因是MacOS本身。我刚刚尝试在普通的非 Java 应用程序(Firefox 和终端)中按 ⌘=,然后我得到了缩放操作,该操作应该由 ⌘+ 激活。请注意,列表中的其中一个事件的 keyChar 为“+”而不是“=”。

我认为苹果这样做是因为更多的应用程序使用 ⌘+ 而不是 ⌘=,并且他们不想强制用户单击 ⌘⇧=。所以他们做了一系列事件并让应用程序来处理。但这完全是我的猜测。

关于java - 单次按键的多个 KEY_PRESSED 事件(等于 '=' 键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388031/

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