gpt4 book ai didi

java - key 适配器不工作

转载 作者:行者123 更新时间:2023-12-01 18:44:19 26 4
gpt4 key购买 nike

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

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

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

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

感谢任何帮助

提前致谢

    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");
}
}
}

最佳答案

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 一起使用。正确使用按键绑定(bind)时,您不会出现焦点问题。

关于java - key 适配器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496667/

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