gpt4 book ai didi

Java KeyEvent 注册未被按下的按键

转载 作者:行者123 更新时间:2023-12-02 01:28:41 27 4
gpt4 key购买 nike

我想要一个程序,它将使用 KeyEvent 读取一个文件中按下的键,并将其写入下一个文件中的控制台。我设置了 Q 和 W 键,但每当我尝试运行该程序时,它都会发送垃圾邮件“按下 Q 键”和“按下 W 键”

我尝试将 KeyPressed 更改为 KeyTyped,但没有任何效果。 KeyPressed、KeyTyped 和 KeyReleased 的单独函数,什么也没有。删除 CHAR_UNDEFINED,什么也没有。

主要IsKeyPressed.java

import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;

public class IsKeyPressed {
private static volatile boolean qPressed = false;
private static volatile boolean wPressed = false;

public static boolean isQPressed() {
synchronized (IsKeyPressed.class) {
return qPressed;
}
}

public static boolean isWPressed() {
synchronized (IsKeyPressed.class) {
return wPressed;
}
}

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

@Override
public boolean dispatchKeyEvent(KeyEvent ke) {
synchronized (IsKeyPressed.class) {
switch(ke.getID()) {
case KeyEvent.KEY_PRESSED:
if (ke.getKeyCode() == KeyEvent.VK_W) {
wPressed = true;
} else if (ke.getKeyCode() == KeyEvent.VK_Q) {
qPressed = true;
}
break;

case KeyEvent.KEY_RELEASED:
if (ke.getKeyCode() == KeyEvent.VK_W) {
wPressed = false;
} else if (ke.getKeyCode() == KeyEvent.VK_Q) {
qPressed = false;
}
break;
}
return false;
}
}
});
}

public void keyTyped(KeyEvent ke) {
//test
}

public void keyPressed(KeyEvent ke) {
//test
}

public void keyReleased(KeyEvent ke) {
//test
}
}

Test.java中的公共(public)类

static boolean randomVariableName = true;

public static void main(String[] args) {
while (randomVariableName == true) {
if (IsKeyPressed.isWPressed()); {
System.out.println("keydown.W");
}
if (IsKeyPressed.isQPressed()); {
System.out.println("keydown.Q");
}
}
}

我预计在键盘上按 Q 将使控制台打印 keydown.Q ,但它只是垃圾邮件 keydown.Qkeydown.W

最佳答案

以下内容会使您的代码成为垃圾代码:

 if (IsKeyPressed.isWPressed()); {
System.out.println("keydown.W");
}

isWPressed() 后面的分号终止表达式,因此始终为 true...

没有垃圾邮件:

 if (IsKeyPressed.isWPressed()) {
System.out.println("keydown.W");
}

此外,我认为您无法通过 KeyboardFocusManager 获取按键。至少您必须启动 Swing JFrame 或 AWT 窗 Eloquent 能获取事件。执行此操作,您还可以简单地将按键监听器或按键映射添加到组件(例如 JTextField )

在您自己的应用程序之外获取事件 - 恕我直言 - 使用 Java 是不可能的。

关于Java KeyEvent 注册未被按下的按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451983/

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