【问题标题】:KeyPress malfunction in applet小程序中的按键故障
【发布时间】:2014-01-03 05:57:06
【问题描述】:

下面是我一直在制作的小程序,它允许用户使用箭头键在屏幕上移动一个矩形。除向下键外,所有键都起作用,它使矩形沿对角线向右下方移动。答案可能很明显;希望不会!请帮忙!谢谢!

import javax.swing.*;

import java.applet.Applet;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.ArrayList;

import javax.imageio.ImageIO;

public class Move extends Applet implements KeyListener {
    private Rectangle rect;
    private ArrayList<Integer> keysDown;

public void init() {
    this.addKeyListener(this);
    keysDown = new ArrayList<Integer>();
    rect = new Rectangle(0, 0, 50, 50);
}

public void paint(Graphics g) {
    setSize(600, 400);
    Graphics2D g2 = (Graphics2D)g;
    g2.fill(rect);
}

@Override
public void keyPressed(KeyEvent e) {
    if (!keysDown.contains(e.getKeyCode()))
        keysDown.add(new Integer(e.getKeyCode()));
moveRect();
}

@Override
public void keyReleased(KeyEvent e) {
    keysDown.remove(new Integer(e.getKeyCode()));
}

public void moveRect() {
    int x = rect.x;
    int y = rect.y;
    if (keysDown.contains(KeyEvent.VK_UP)) {
        y -= 2;
    }
    if (keysDown.contains(KeyEvent.VK_DOWN)) {
        y += 2;
    }
    if (keysDown.contains(KeyEvent.VK_LEFT)) {
        x -= 2;
    }
    if (keysDown.contains(KeyEvent.VK_DOWN)) {
        x += 2;
    }
    rect.setLocation(x, y);
    repaint();
}

@Override
public void keyTyped(KeyEvent e) {

}
}

【问题讨论】:

  • 1) +1 用于发布 SSCCE。很高兴你把事情解决了。 :) 2)不需要在问题的标题中添加主要标签。 ;)

标签: java applet awt keypress keylistener


【解决方案1】:

您在处理按键的moveRect 的if 语句中是否缺少VK_RIGHT

我看到你有两个VK_DOWN - 当你按下向下键时,这将沿着 X 和 Y 移动矩形。

查看moveRect 方法中的这些行,注意VK_DOWN 是如何被处理两次的(而VK_RIGHT 根本没有被处理):

if (keysDown.contains(KeyEvent.VK_UP)) {
    y -= 2;
}
if (keysDown.contains(KeyEvent.VK_DOWN)) {
    y += 2;
}
if (keysDown.contains(KeyEvent.VK_LEFT)) {
    x -= 2;
}
if (keysDown.contains(KeyEvent.VK_DOWN)) {
    x += 2;
}

【讨论】:

  • 你能突出显示麻烦的代码块吗,花了我一分钟的时间盯着它+1
  • 一定是它!带来不便敬请谅解。我什至看了代码...+1!
猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2013-09-09
  • 2022-12-15
相关资源
最近更新 更多