gpt4 book ai didi

java - KeyListener - 我需要在我的 main 中调用 keyPressed 方法吗?

转载 作者:行者123 更新时间:2023-11-30 07:01:12 25 4
gpt4 key购买 nike

这是我的 keyPressed 里面的内容:

public class Movie extends JFrame implements KeyListener {

public static Sprite star1 = new Sprite("Assets/star1.png");
public static Sprite star2 = new Sprite("Assets/star2.png");
public static Sprite star3 = new Sprite("Assets/star3.png");

public void init(){
this.addKeyListener(this);
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

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

}
public void keyPressed(KeyEvent e) {

System.out.println("KEY PRESSED: " + e.getKeyChar());
animation window = new animation(500, 450); //length , height

if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
setFocusable(true);
Movie.star1.setPosition( Movie.star1.getXposition() -100, 0);
window.frameFinished();
}
else if (e.getKeyCode() == KeyEvent.VK_UP)
{
setFocusable(true);
Movie.star1.setPosition( Movie.star1.getXposition() +100, 0);
window.repaint();
}

}

按下箭头键时,我的对象没有移动。

我只想知道 - 这是因为我需要在我的 main 中调用 keyPressed(KeyEvent e) 方法吗?当我调用它时,我收到一条错误消息:

cannot be resolved in a variable

我要移动的对象在一个巨大的循环中。

最佳答案

如果您从未将关键监听器添加到某个 Swing 组件,那么它将永远不会接收事件。

KeyListener 本身并不神奇,也不会监听按键。您使用 KeyListener 所做的是:您告诉其他一些 Swing 组件(如窗口或文本框)在按下某个键时调用您的 KeyListener。该组件用于查找按键,而不是监听器。

在您的情况下,您似乎打算使用 this.addKeyListener(this); 将键监听器添加到窗口(因为在您的情况下 thisKeyListenerJFrame)。

但是,如果没有任何东西调用您的 init 方法,那么您的 init 方法中的代码(与任何方法一样)永远不会运行,因此不会添加关键监听器到窗口,所以窗口不会在按下键时调用它!

一个可能的解决方案是确保在创建新的 Movie 后调用 init(您没有显示发生这种情况的代码)。

另一种解决方案是使用构造函数而不是方法,如下所示:

public Movie() {
this.addKeyListener(this);
}

- 构造函数在创建对象时运行,这样一来,每当创建 Movie 对象时都会调用 addKeyListener,而创建者不必记住调用 初始化

关于java - KeyListener - 我需要在我的 main 中调用 keyPressed 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011591/

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