java - 将 KeyListener 添加到 JPanel 不起作用

标签 java swing keylistener

我刚刚完成了有关制作网络游戏的在线教程。 游戏本身只是一个在屏幕上跟随鼠标的小圆圈。

我一直在修改代码以使用按键而不是鼠标来移动圆圈。然而,虽然我以前这样做过,但我从未使用过“JPanel”,而且我 努力获取移动圆圈的 key 。

游戏的“客户端”端仅包含两个文件,Client.java 和 DataPackage.java,问题(据我所知)似乎出在 Client.java 中。

我不会粘贴整个代码,因为它相当大(如果您认为有必要,我会粘贴),但这里是使球跟随鼠标的部分

public Client()
    {
        this.addMouseMotionListener(new MouseMotionListener()
        {

            @Override
            public void mouseDragged(MouseEvent e)
            {
                x = e.getX();
                y = e.getY();
            }

            @Override
            public void mouseMoved(MouseEvent e) {}

        });
}

现在我尝试改变

this.addMouseMotionListener(new MouseMotionListener()
            {

                @Override
                public void mouseDragged(MouseEvent e)
                {
                    x = e.getX();
                    y = e.getY();
                }

                @Override
                public void mouseMoved(MouseEvent e) {}

            });

this.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) { System.out.println( "tester"); }

            public void keyReleased(KeyEvent e) { System.out.println("2test2"); }

            public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
        });

但这似乎不起作用,然后我尝试通过将其放在

之外来更改键控代码的位置
public Client() { }

然后我认为这可能是文件顶部的“implements”标签。所以我添加了

implements KeyListener

到结尾

public class Client extends JComponent

但同样,这不起作用 然后我做了一些更多的研究,似乎我需要使用设置面板来聚焦

panel.setFocusable(true);

但是这个信息的来源,没有说把它放在哪里,而且我把它放在哪里都会抛出错误

有人可以帮我解释一下吗?

最佳答案

看看挥杆大师@camickr 的文章 Motion using the keyboard 。使用 KeyListeners 有两个大问题,组件必须可聚焦并且必须处于焦点。KeyBindings 是在 swing 中将键绑定(bind)到特定操作的正确方法。 How to Use KeyBindings

关于java - 将 KeyListener 添加到 JPanel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18815998/

相关文章:

java - 如何将 MouseListener 添加到框架

java - 为什么这个 JPanel 不可见?

java - 在 Java 中搜索 JList

java - 如何消除按键延迟?

Java 卡布局,KeyListener 停止工作

java - 任何可用于 LiquiBase 的 API

Java:写入 UTF-32 格式的文件

java - 使用 java 在邮件中附加文档

java - 在图像上绘图

java - Java JTextArea 中选择文本触发的哪个事件?