如何在屏幕上移动对象

时间:2015-10-25 16:38:01

标签: java swing animation

嗨,任何人都可以指导我如何在屏幕上移动物体。试过了 但它不起作用。我的代码在屏幕上绘制了100个椭圆,我需要什么才能让这些椭圆形移动。

import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;


public class DropGui extends JFrame {

    Random rand = new Random();
    int xpos,ypos,xvel,yvel,size;

    public DropGui()
    {
        setTitle("Testing Moving Objects");
        setSize(900,600);
        setLocation(200,80);
        getContentPane().setBackground(Color.WHITE);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        // assign random values to xpos,ypos,size variables
         xpos = rand.nextInt(900 - 0 + 1) + 0; 
         ypos = rand.nextInt(900 - 0 + 1) + 0; 
         size = rand.nextInt(30 - 5 + 1) + 5; 

    }


    public void paint(Graphics g)
    {
        super.paint(g);

        // draws about a 100 ovals to the screen
        for(int i = 0 ; i < 100 ; i++)
        {
            g.fillOval(xpos,ypos,size,size);   

            xpos = rand.nextInt(900 - 0 + 1) + 0; 
            ypos = rand.nextInt(900 - 0 + 1) + 0; 
            size = rand.nextInt(30 - 5 + 1) + 5; 
        }

    }


}

1 个答案:

答案 0 :(得分:1)

不要覆盖paint()。

通过覆盖JPanel(或JComponent)的paintComponent()方法完成自定义绘制,然后将面板添加到框架中。有关更多信息和示例,请参阅Custom Painting上Swing教程中的部分。

此外,您不应该在绘画方法中生成随机对象。您无法控制何时调用绘制方法。相反,您应该创建一个要绘制的对象列表,然后绘制方法将遍历此列表以绘制所有对象。有关如何实现此功能的实例,请参阅Custom Painting Approaches中的DrawOnComponent示例。

最后,如果你想要动画,那么你应该使用Swing Timer来安排动画。当Timer触发时,您遍历List并更改List中每个对象的位置。然后在面板上调用repaint(),以便重新绘制对象。