【问题标题】:Java JPanel movement (keylistener) not workingJava JPanel 移动(keylistener)不起作用
【发布时间】:2014-05-03 12:48:45
【问题描述】:

我一直试图让图像在 Jpanel 中上下移动相当长的时间 很长一段时间,但它似乎从来没有工作过。

如果我在视图中输入“y = y - 1”,它会使图像向上移动,所以我 猜猜是keylistener的问题吧?

有人可以帮我解决这个问题吗?老实说......我认为它会 这是一个非常愚蠢的错误,但我找不到如何让它发挥作用。

额外信息:我正在使用 BlueJ 从它中提取 4 个类 我的问题的基本程序。我意识到很多人在 互联网说使用键绑定而不是 KeyListener 但我不 暂时了解键绑定...

--- 听从 Hovercraft Full Of Eels 的建议,我会尝试使用 Keybindings。 ---

所以 Keybindings 有 2 个“命令”可以工作:输入和操作。

复制此代码并为我的程序更改它:

protected void addBindings() {
   int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
   InputMap inputMap = getInputMap(condition); // What does this do?

   KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.KEY_PRESS);
   inputMap.put(key, move(0, 2));

移动功能:

protected void beweeg (int dx, int dy)
{
    view.x = view.x + dx;
    view.y = view.y + dy;
}

我不得不说...这个论坛上的代码系统非常令人沮丧。 尝试此操作时,我得到:“找不到符号 - 方法 getInputMap(int)” 我需要在某个地方声明吗?我没有看到任何关于此的内容。

【问题讨论】:

  • 请在网站上搜索类似的问题,因为这已被多次询问和回答。要点:不要使用 KeyListener 而是使用 Key Bindings。谷歌可以带你去教程。并且永远不要从paintComponent 中调用repaint()——这不是一种安全的动画方式。请改用摇摆计时器。
  • 好的,所以我之前尝试过(键绑定),它没有工作所以我想我会在这里问更多?如果你没问题的话。
  • 哦,当然,请多问,请编辑您的问题。越详细和相关的代码(当然要省略与问题无关的代码),我们就能越好地提供帮助。因此,如果可以,请发布您的密钥绑定尝试。最好能发minimal code example program 供我们审查、测试并可能帮助您修复。
  • 我为像你这样的案例准备了一个答案 - How to use Key Bindings instead of Key Listeners,尽管还有更多的案例在处理这个问题。
  • 请参阅Motion Using the Keyboard,了解使用键绑定的完整工作示例。

标签: java swing controller keylistener


【解决方案1】:

你问:

尝试此操作时,我得到:“找不到符号 - 方法 getInputMap(int)”我需要在某处声明它吗?

必须在派生自 JComponent 或其子对象之一(例如 JPanel)的对象上调用此方法。此错误消息意味着您在不扩展 JComponent 或其子级之一(如 JPanel)的类内部进行此调用。一种可能的解决方案是在 JPanel 对象上调用要附加绑定的对象上的方法。


说到链接,这是我的一些链接:linklinklinklinklinklink、...

【讨论】:

  • 是的,在使用 user1803551 的指南时发现 :) 感谢其他读者: static JLabel obj1 = new JLabel();私有静态最终 int IFW = JComponent.WHEN_IN_FOCUSED_WINDOW; obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("UP"), MOVE_UP); obj1.getActionMap().put(MOVE_UP, boven());老实说......在这个论坛上写东西一点也不好玩......我什至不能发表一个好的评论而不必麻烦......呃
  • @Java-questions:上面贴有我自己的一些链接以及示例代码。随着时间的推移,论坛的使用会变得更加容易,相信我。
  • @Java-questions,不要对 JLabel 使用静态变量。
  • @Java-questions 如果您通过编辑问题而不是在评论中发布代码来发布代码会更好。
【解决方案2】:

关键词:驾驶旋转转弯车

所以经过长时间的搜索和几个论坛的帮助,我得到了以下结果,“驾驶”汽车并“平稳”转弯。 很抱歉没有使用之前提供的代码,但它帮助我理解了很多。谢谢

我不知道如何使用这个论坛上的编码,请问有人可以插入以下代码吗?谢谢 http://hostcode.sourceforge.net/view/1728

也许有人可以在线使用它:)

亲切的问候

尼尔斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2015-01-31
    相关资源
    最近更新 更多