如何在Java中制作圆形幻灯片?不紧不慢

如何在Java中制作圆形幻灯片?不紧不慢,java,swing,animation,graphics,keylistener,Java,Swing,Animation,Graphics,Keylistener,当我按下钥匙时,我想让椭圆滑动。但是它不起作用 我尝试了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

当我按下钥匙时,我想让椭圆滑动。但是它不起作用

我尝试了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(); 
    }
}

更改坐标值后,需要将图像对象的重绘方法调用为椭圆


在按键方法的末尾,添加dbgImage.repaint。这将导致调用图像的父绘制方法,在本例中是帧的绘制方法。

更改坐标值后,需要将图像对象的重绘方法调用为椭圆


在按键方法的末尾,添加dbgImage.repaint。这将导致调用图像的父绘制方法,在本例中,该方法是帧的绘制方法。

不应覆盖绘制


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

不应覆盖绘制


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

是否尝试进行调试?例如,要查看调用pintComponent时哪些值具有x和y,如果调用了pintComponent,请不要直接在JFrame或其他顶级容器中绘制。相反,您应该在JPanel或从JComponent派生的其他类的paintComponent重写中绘制,然后由JFrame显示。您是否尝试进行一些调试?例如,要查看调用pintComponent时哪些值具有x和y,如果调用了pintComponent,请不要直接在JFrame或其他顶级容器中绘制。相反,您应该在JPanel或从JComponent派生的其他类的paintComponent重写中绘制,然后由JFrame显示。