【问题标题】:KeyAdapter not working密钥适配器不工作
【发布时间】:2013-09-01 01:03:30
【问题描述】:

我刚刚编写了一些小代码,试图让我的 KeyEvent 管理器工作。

如您所见,我创建了一个 JFrame 并添加了 gameComponent,它是 Game 类的一个对象。我将 JPanel 设置为可聚焦并请求焦点。然后将一个名为 TAdapter 的 KeyAdapter 设置为 KeyAdapter。您可以在其扩展 KeyAdapter 和方法 keyPressed() 的代码中看到该类。

我告诉程序在按下一个键时将“按下”打印到我的控制台,但没有任何反应。

我无法弄清楚我做错了什么,也许有人看到了一些我自己看不到的错误?

感谢任何帮助

提前致谢

    public class Game extends JPanel {

public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 3;

public Game() {
    addKeyListener(new TAdapter());
    setFocusable(true);
    requestFocus();
}

public static void main(String[] args) {
    Game gameComponent = new Game();
    Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
    JFrame frame = new JFrame("Invaders");

    frame.setVisible(true);
    frame.setSize(size);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.add(gameComponent);
}

public class TAdapter extends KeyAdapter {

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

【问题讨论】:

  • 测试了你的代码,它运行良好。
  • 可能是按钮被某些东西混淆了,或者窗口没有焦点?
  • 可能是我的键盘有问题。我正在使用附带的 Type Cover 在我的 Surface Pro 上编写代码,而在我的另一台电脑上,这段代码总是像魅力一样工作。谢谢
  • camickr 答案是正确的,如果您阅读 api,它会说您不必调用 requestFocus 而是使用 requestFocusInWindow() 但不会做任何事情并返回错误,因为面板不是 focusable ,所以不要使用KeyBinding

标签: java swing input jframe


【解决方案1】:
requestFocus();

正确的使用方法是:

requestFocusInWindow();

虽然即使那个方法也不起作用,因为这些方法只能在可见组件上调用。当你创建组件时它还不可见,所以去掉那行代码。

您的代码的主要问题是您在框架可见之后将组件添加到框架中。代码应该是这样的:

frame.add(gameComponent);
frame.setSize(size);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);

setVisible(true) 应该是在所有组件都添加到框架之后您要做的最后一件事。

最后,您甚至不应该使用 KeyListener。 Swing 旨在与Key Bindings 一起使用。正确使用键绑定不会有焦点问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2021-02-20
    • 2014-05-13
    相关资源
    最近更新 更多