当前位置: 首页 > 知识库问答 >
问题:

Java KeyEvent注册未按下的键

丌官飞章
2023-03-14
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
    }
}

Java中的公共类

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

共有1个答案

邹杰
2023-03-14

以下将使您的代码成为垃圾邮件:

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

isWPressed()后面的分号终止表达式,所以总是true...

无垃圾邮件:

 if (IsKeyPressed.isWPressed()) {
     System.out.println("keydown.W");
 }
 类似资料:
  • A) 为什么当我尝试运行应用程序时会出现此错误? 我的崩溃日志错误 Java语言lang.RuntimeException:无法启动活动java。lang.IllegalStateException:未注册任何检测!必须在注册检测下运行。在android上。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2947)

  • 具有自签名证书的专用注册中心的说明在登录时说明: 我已经确认了它是在设定中。 根6865 1 0 12:47?00:00:00/usr/bin/docker-d--不安全-registry registry:8443 但docker登录仍然会产生以下错误: 是的,我需要HTTPS。它是一个私有注册表,但在一个公共IP上。唯一的方法是用一个真正的证书创建一个正确的DNS条目吗?

  • 当我执行时,我的服务按预期列出,但当我从web或通过功能测试访问我的包时,我得到: 未捕获的PHP异常Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:“您请求了一个不存在的服务”xx。处理程序”在xx/app/bootstrap。php。缓存行2031{“异常”:“[对象](Symfony\Compo

  • 在64位计算机上运行Visual Studio 2012应用程序时,会显示以下错误消息: 由于以下错误,检索CLSID为{F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B}的组件的COM类工厂失败:80040154类未注册(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG)) 我正在visualstudio中使用Inventor packa

  • 在react-native中,我有一个TextInput元素,当您单击它时,键盘会按需要弹出。然而,问题是,我有一个箭头按钮,当您将输入输入到TextInput中时,您可以单击该按钮,但第一次触摸该按钮或其他任何地方时,总是只删除键盘,而不会在箭头按钮上运行onPress功能。我如何使它,当我输入了我的文本,并仍然有键盘向上。下一次按下既可以移除键盘,又可以在按钮上执行onPress功能。现在用户

  • 本规范不排除使用未注册的客户端。然而,使用这样的客户端超出了本规范的范围,并需要额外的安全性分析并审查其互操作性影响。