【问题标题】:Java KeyListener ClassJava KeyListener 类
【发布时间】:2023-03-03 09:36:01
【问题描述】:

我有一个 Keylistener 类,用于我正在制作的游戏,它有 bpne 问题。我似乎无法通过按键来移动 pacman。似乎从未调用过 Keylistener 方法。我对 Java 和 GUI 界面比较陌生,所以如果我的编码有点生疏,请原谅我。

import java.awt.event.*;

public class PacRunner implements ActionListener, KeyListener
{
    private static Grid gr;
    public static void main (String[] args)
    {   
    gr = new Grid();
    gr.addGhost(new Location(4,11));
    gr.movePac(new Location(6,11));
    gr.show();
    }

   public void keyPressed(KeyEvent e)
   {
        if(e.getKeyCode() == KeyEvent.VK_UP) gr.move(Location.UP);          
        else if(e.getKeyCode() == KeyEvent.VK_DOWN) gr.move(Location.DOWN);
        else if(e.getKeyCode() == KeyEvent.VK_LEFT) gr.move(Location.LEFT);
        else if(e.getKeyCode() == KeyEvent.VK_RIGHT) gr.move(Location.RIGHT);
    }


    public void keyReleased(KeyEvent e) {}

    public void keyTyped(KeyEvent e) {}


    @Override
    public void actionPerformed(ActionEvent e) {}
}

【问题讨论】:

  • 对于 Swing,通常在基于 AWT 的较低级别 KeyListener 上使用键绑定。有关如何使用它们的详细信息,请参阅How to Use Key BindingsKeyListener 的问题通常是 a) 组件没有焦点,或者.. b) 组件不可聚焦,-- 为了尽快获得更好的帮助,请发布 MCVE
  • 顺便说一句 - 这是使用 AWT 还是基于 Swing 的组件?

标签: java user-interface keylistener pacman


【解决方案1】:

您尚未注册您的 KeyListener。必须添加 KeyListener。

java.awt.Component 类包含方法addKeyListener(KeyListener l)

您必须确定要拦截事件的java.awt.Component。一旦您确定了该组件,您将使用 PacRunner 作为 KeyListener 参数调用此方法:

component.addKeyListener(myPacRunner);

或者,如果从 PacRunner 实例中调用该方法:

component.addKeyListener(this);

为了在您提供的代码中实现此模式,假设类Grid 扩展Component,您将首先实例化您的PacRunner,然后将该PacRunner 实例作为KeyListener 添加到Grid

public static void main (String[] args)
{
    PacRunner myPacRunner = new PacRunner(); // An Empty constructor inherited from Object
    gr = new Grid();
    gr.addKeyListener(myPacRunner);
    ...
}

为了更完整地处理该主题。请参阅 Java 教程中的 How to Write a Key Listener

【讨论】:

  • 好的,我不能将它添加到静态 void main。我应该在程序的哪里添加它以使其正常工作?
  • Grid 是否扩展组件?如果不是,请提供一些关于您的 GUI 的信息。
  • 我已经编辑了示例来说明在静态主方法中使用 PacRunner 实例作为 KeyListener 的一种可能方法
【解决方案2】:

您可能忘记的是在您的主要方法中添加这行代码:

component.addKeyListener(keyListener)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2016-02-08
    相关资源
    最近更新 更多