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