为了账号安全,请及时绑定邮箱和手机立即绑定

Keylistener不为JPanel工作

Keylistener不为JPanel工作

MM们 2019-08-23 10:00:46
Keylistener不为JPanel工作我正在尝试使用我的JPanel类中的KeyListener按下其中一个箭头键时执行某些操作。这是我的代码:public class TestPanel extends JPanel implements KeyListener{     public TestPanel(){         this.addKeyListener(this);         this.setFocusable(true);         this.requestFocusInWindow();     }     public void keyPressed(KeyEvent e) {         if (e.getKeyCode() == KeyEvent.VK_RIGHT) {             System.out.println("Right");         }         if (e.getKeyCode() == KeyEvent.VK_LEFT) {             System.out.println("Left");         }     }     public void keyTyped(KeyEvent e) {}     public void keyReleased(KeyEvent e) {}}我的main方法将一个新面板实例添加到一个框架并显示它。我需要将keylistener添加到JFrame吗?在我的情况下,这将是困难和低效的,所以如果可能的话,我想让它与这个JPanel一起工作。谁知道我做错了什么?编辑:键绑定代码不起作用:public class GamePanel extends JPanel implements ActionListener{//Constructorpublic GamePanel(){     setupKeyBinding();     this.setFocusable(true);     this.requestFocusInWindow();}private void setupKeyBinding() {     int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;     InputMap inMap = getInputMap(condition);     ActionMap actMap = getActionMap();     inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left");     actMap.put("Left", new leftAction());}private class leftAction extends AbstractAction {        public void actionPerformed(ActionEvent e) {           System.out.println("test");        }}public void actionPerformed(ActionEvent e) {     //some other game info}}谁能告诉我为什么这也不起作用?(我的第二个动作听众是我游戏所需的其他东西)
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

如果您搜索此问题,您将看到它已被询问并已多次解决。

  • KeyListeners需要在焦点组件上工作。一种解决方案是在首次使其可聚焦之后为您的组件提供焦点。

  • 然而,通过长镜头更好的是使用键绑定。谷歌的教程就此。

请详细了解我对此问题的回答,包括许多血腥细节。


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 612 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信