【问题标题】:JPanel key listener not working [duplicate]JPanel键监听器不工作[重复]
【发布时间】:2017-04-18 02:08:15
【问题描述】:

我正在制作一个包含多个类的大型程序,但我编写的一些代码存在问题。我的鼠标监听器工作得很好,使用相同的步骤,我的关键监听器没有。我的代码如下;

主要方法

public static void main(String[] args) {
    window._init_(panel);
}

窗口初始化方法:

public void _init_(JPanel panel){
    window = new JFrame("Asteroid");
    window.setPreferredSize(size);
    window.setDefaultCloseOperation(closeOpp);
    window.add(panel);
    window.getContentPane();
    window.setResizable(resizable);
    window.setFocusable(focusable);
    window.pack();
    window.setLocationRelativeTo(location);
    window.setVisible(visibility);
}

面板初始化方法:

public MainPanel(){
    //panel initialization
    System.out.println("inside constructor");
    panel = new JPanel();
    this.add(panel);
    this.addKeyListener(this);
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    this.setSize(Window.size);
    this.setFocusable(Window.focusable);
    this.add(b);
    this.setVisible(Window.visibility);
}

面板监听方法

@Override
public void keyPressed(KeyEvent e) {
    System.out.println("key pressed");
}
@Override
public void keyReleased(KeyEvent e) {
    System.out.println("key released");
}
@Override
public void mouseClicked(MouseEvent e) {
    System.out.println("mouse clicked");
}
public void keyTyped(KeyEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}

ps。面板实现了所有使用的监听器,定义了所有变量,程序运行无错误

【问题讨论】:

  • 欢迎来到我们不推荐KeyListener的奇妙世界。您应该查看How to Use Key Bindings 以获取解决KeyListener 短消息的解决方案
  • 我正在查看b,我想知道它是否是JButton,它可能会抢走注意力

标签: java swing jpanel keylistener


【解决方案1】:

您将焦点设置在框架而不是 JPanel 上,但是即使将焦点更改为 JPanel 也会提供一定程度的不可预测的行为,因为很容易失去 JPanel 的焦点。我建议您使用 Key Binding 或 Change your keylistner 方法和其他覆盖方法来附加到 JFrame 而不是 JPanel 以确保在使用应用程序期间保持焦点。

【讨论】:

  • “你的设置聚焦于你的框架而不是 JPanel” - 我没有看到他们称之为requestFocusXxx的任何地方@
猜你喜欢
  • 2011-06-14
  • 2012-06-17
  • 2013-12-06
  • 2017-05-17
  • 2017-10-12
  • 2013-07-12
  • 1970-01-01
  • 2012-07-31
相关资源
最近更新 更多