1

我希望椭圆在按住键时滑动。但它不会工作!

我尝试了什么都不做的while循环。

我有点杂乱无章,但它仍然可读。我使用的是较低版本的 java,所以有些东西看起来会有所不同。

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;

public class TEST extends JFrame {

    int x, y;

    private Image dbgImage;
    private Graphics dbg;

    public TEST() {
        addKeyListener(new AL());
        setTitle("CIRCLE THING");
        setSize(1000, 1000);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setResizable(true);
        x = 150;
        y = 150;
    }

    public class AL extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();

            if(keyCode == e.VK_D) {
                x++;
            }
            if(keyCode == e.VK_A) {
                x--;
            }
            if(keyCode == e.VK_W) {
                y--;
            }
            if(keyCode == e.VK_S) {
                y++;
            }
        }

        public void keyReleased(KeyEvent e) {}
    }

    public void paint(Graphics g) {
        dbgImage = createImage (getWidth(), getHeight());
        dbg = dbgImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbgImage, 0, 0, this);
    }

    public void paintComponent(Graphics g) {
        g.fillOval(x, y, 90, 100);
        repaint();  
    }

    public static void main(String[] args) {
        new TEST(); 
    }
}
4

2 回答 2

4

你不应该重写paint()。

有关一些示例,请参阅使用键盘进行运动。该示例移动了一个标签,但许多概念是相同的。一个区别是,当您进行自定义绘制时,您负责在更改组件的属性时调用组件上的 repaint() 方法。在您的情况下,当您更改要绘制图像的位置时。

于 2013-06-09T20:10:57.753 回答
1

更改坐标值后,您需要调用图像对象(椭圆)的 repaint() 方法。

在 keyPressed() 方法的最后,添加 dbgImage.repaint()。这将导致调用图像的父paint() 方法,在这种情况下是您的框架的paint() 方法。

于 2013-06-09T20:03:34.860 回答