【发布时间】:2015-01-06 00:18:27
【问题描述】:
我不知道为什么当我按下 w 时,我的矩形没有相应地调整。我的重点设置是否正确,还是需要从单独的班级申请?我应该在我的drawingComponent 班级还是在我的“核心”班级中这样做?
package scratch;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.*;
public class drawingComponent extends JComponent implements KeyListener {
Rectangle hello = new Rectangle(300, 100, 50, 50);
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.setColor(new Color(255,25,0));
g2.setFont(new Font("monospace", Font.BOLD+Font.ITALIC, 30));
g2.drawString("nothing yet",300,320);
g2.fill(hello);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W){
hello.setLocation(hello.x-50, hello.y);
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
我通过将以下内容添加到我的 drawingComponent 类中解决了这个问题。
setFocusable(true);
requestFocus();
addKeyListener(this);
【问题讨论】:
-
1) 为此使用键绑定,而不是 KeyListener。 2)如果您仍然卡住,请考虑创建并发布Minimal, Complete, and Verifiable Example Program。
-
3) 在你的 override 中调用 super 的 paintComponent 方法,以免你不擦除旧图像。