gpt4 book ai didi

java - KeyListener 不会监听 JPanel

转载 作者:行者123 更新时间:2023-12-01 18:29:49 25 4
gpt4 key购买 nike

这是一个非常简单的程序,但由于某种原因,当我调试它并在 keyPressedkeyReleasedkeyTyped 方法处设置断点时,程序永远不会就此停止。

    mainKeyListener = new KeyListener() {

public void keyPressed(KeyEvent e) {
System.out.println("KEY PRESSED");
repaint();
}
}

@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub

}
};

这里我将其添加到 JPanel 中,这是框架的确切大小以及框架上唯一的对象:

    JPanel backgroundPanel = new JPanel();
backgroundPanel.setBounds(0,0, 400, 500);
backgroundPanel.addKeyListener(mainKeyListener);
backgroundPanel.setFocusable(true);
getContentPane().add(backgroundPanel);

最佳答案

您的问题在于焦点元素。我认为您的面板失去了焦点。

注意:要触发键盘事件,组件必须具有键盘焦点。对于您的示例,可以通过多种方式解决它,您可以使用KeyboardFocusManager,例如如下所示:

KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
focusManager.addKeyEventDispatcher(new KeyEventDispatcher() {

public boolean dispatchKeyEvent(KeyEvent e) {
if(focusManager.getFocusOwner()!=backgroundPanel){
focusManager.redispatchEvent(backgroundPanel,e);
return true;}
else return false;
}
});

还尝试使用按键绑定(bind) http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

关于java - KeyListener 不会监听 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24752162/

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