我刚刚完成了有关制作网络游戏的在线教程。 游戏本身只是一个在屏幕上跟随鼠标的小圆圈。
我一直在修改代码以使用按键而不是鼠标来移动圆圈。然而,虽然我以前这样做过,但我从未使用过“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/