gpt4 book ai didi

java - 监听 CAPS 键

转载 作者:行者123 更新时间:2023-12-01 20:55:07 26 4
gpt4 key购买 nike

我一直在尝试构建一个小型实用程序,用于监听用户何时按下“Caps Lock”键。无论按键是 ON 还是 OFF,程序都应该启动并首先显示。该程序还应该监听任何更改,并相应地更新框架。

不幸的是,我唯一能做对的部分是在开始时,当大写键打开或关闭时显示框架。之后,它就被卡住了。即使我按下该键,屏幕上也不会发生任何变化。

当大写键打开时,该程序还应该产生 .beep() 声音,但只有当我在大写键打开的情况下启动它时它才有效。

代码:

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(400, 400);
JLabel label = new JLabel("CAPS LOCK IS ON!");
JLabel label1 = new JLabel("CAPS LOCK IS OFF!");

boolean check = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);

if (check == true) {
frame.repaint();
frame.add(label);
Toolkit.getDefaultToolkit().beep();
} else {
frame.repaint();
frame.add(label1);
}
keyPressed(KeyCode.CAPS);
frame.show();

}

public static void keyPressed(KeyCode e) {
boolean check = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
if (check == true) {
Toolkit.getDefaultToolkit().beep();
}
}

编辑:如果您只想知道大写键是否已切换(打开):

if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) {
label.setText("CAPS LOCK IS ON!");
Toolkit.getDefaultToolkit().beep();
} else {
label.setText("CAPS LOCK IS OFF");
}

这样,它仅在切换大写键时发出蜂鸣声,而在未切换大写键时不会发出蜂鸣声。

最佳答案

如果您只想在应用程序中跟踪“Caps Lock”,您可以执行以下操作:

    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher()
{
@Override
public boolean dispatchKeyEvent(KeyEvent e)
{
if (KeyEvent.VK_CAPS_LOCK == e.getKeyCode())
{
boolean check = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
// do something here
}
return false;
}
});

当您的应用重新聚焦时,您可能还需要跟踪焦点并更新状态。

但是,如果您希望您的应用程序像我怀疑的那样在系统范围内跟踪 Caps Lock,那么不幸的是您不走运。纯 Java 无法做到这一点,因为这是一个非常特定于操作系统的功能。对于 Windows 来说,还有一个 C 代码的包装器 https://github.com/kristian/system-hook

关于java - 监听 CAPS 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42495057/

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