gpt4 book ai didi

java - 在 Mac 上,在 Java 中,某些键不会触发 keyPressed 事件

转载 作者:行者123 更新时间:2023-11-30 10:31:28 27 4
gpt4 key购买 nike

这是一个非常奇怪的问题,但我只是将一个简单的 keyListener 添加到 JPanel 中,该 JPanel 在 keyPressed 和 keyReleased 上打印。通常它工作正常,但在某些键(如“A”)上,如果我在释放之前按住,则在该释放之后没有其他键会触发 keyPressed,直到我按住某些键(如“D”)。在那之后,它会恢复正常,除非我按下一个“坏”键并按住它太久。

最后一点,keyReleased 总是正确触发,只是 keyPressed 失败了。

编辑2:我已将代码简化为以下内容,它的行为仍然如上所述:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);

frame.addKeyListener(new KeyListener() {

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
System.out.println("Pressed");
}

@Override
public void keyReleased(KeyEvent e) {
System.out.println("Released");
}

});
}
}

编辑:代码摘录:

JFrame frame = new JFrame("test");
frame.setSize(WIDTH, HEIGHT);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setResizable(false);

JLayeredPane panel = new JLayeredPane();
panel.setBounds(0, 0, WIDTH, HEIGHT);
panel.setLayout(null);


frame.add(panel);
KeyListener listener = new KeyListener() {

public void keyTyped(KeyEvent e) {
System.out.println("typed: "+e.getKeyCode());
}

@Override
public void keyPressed(KeyEvent e) {
System.out.println("pressed: "+e.getKeyCode());
}

@Override
public void keyReleased(KeyEvent e) {
System.out.println("released: "+e.getKeyCode());
System.out.println();
}

};
panel.addKeyListener(listener);
frame.addKeyListener(listener);
frame.setVisible(true);

最佳答案

我最近遇到了这个问题,这是由 MacOS 在您按住某些键时显示上下文菜单(允许您选择其他语言字符)引起的,错误报告页面有一个对我有用的很好的解决方案:

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8167263

To disabled the character accent menu and enable auto-repeat, type the following at the command prompt:

defaults write -g ApplePressAndHoldEnabled -bool false

This can be reversed with the following:

defaults write -g ApplePressAndHoldEnabled -bool true

我刚刚在 mac 控制台上试过了,我的 java 应用程序不再有关键问题。

关于java - 在 Mac 上,在 Java 中,某些键不会触发 keyPressed 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192166/

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