java - 小程序中的按键故障

标签 java applet awt keypress keylistener

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

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) {

}
}

最佳答案

您在处理按键的 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;
}

关于java - 小程序中的按键故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600827/

相关文章:

java - 如何传递 BufferedInputStream 或包含 JAX-WS 中其他对象的对象?

java - Eclipse、maven 和 wtp

java - 我可以在多个环境中使用单个 war 文件吗?我是不是该?

java - 为什么当我创建对话框时我的 Swing 应用程序会最小化?

java - 多框架 GUI 中的 NumberFormatException

java - 运行时显示的小程序中的随机数会更新每一帧,或被背景图像 overdraw

java - 在循环中运行 lambda

java - 为什么 Appletviewer 抛出 AccessControlException : access denied

java - 如何找出哪个文本字段不是整数

java - 小程序加载失败