我正试图用keyEvent移动一个圆圈。到目前为止,圆形画在窗口上,但它不会左移!我觉得问题是我将Window()构造函数添加到容器的位置。控制台上没有输出来告诉我它正在工作。所以我不认为它甚至达到了KeyEvent类。这里是我的代码:Java在gui中用箭头键移动圆圈
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import javax.swing.*;
public class Window extends JPanel {
private static Ellipse2D.Double circle;
public Window() {
super();
int width = 400;
int height = 400;
circle = new Ellipse2D.Double(0.5 * width, 0.9 * height,
0.1 * width, 0.05 * height);
addKeyListener(new MoveCircle());
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D brush = (Graphics2D) g;
int width = getWidth();
int height = getHeight();
g.clearRect(0, 0, width, height);
brush.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
brush.draw(circle);
}
public class MoveCircle implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("Working on top!");
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("Working on bottom!");
circle.x++;
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
public static void main(String[] args) {
Window window = new Window();
JFrame frame = new JFrame();
Container container = frame.getContentPane();
container.add(new Window());
frame.addKeyEvent(window.new MoveCircle());
frame.setSize(800, 700);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
我修改了它现在可以正常工作,现在圆圈左右移动。不过,我正在尝试像newX = circle.x + 5.0;这是无所事事,让圆移动的唯一方法是circle.x ++;我不喜欢它移动的速度有多慢......? – user1198199 2012-03-15 20:50:32
你试过用'circle.x + = 5;'而不是'newX = circle.x + 5.0;'? – 2012-03-15 20:54:50
啊,是的,谢谢你。我不知道为什么它不接受新的任务。那么你已经保存了一天,现在我将继续我的比赛。谢谢你,先生! – user1198199 2012-03-15 20:57:24