【发布时间】: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