Java swing简单动画

时间:2014-03-13 23:05:52

标签: java swing animation random

我遇到了一个简单的动画程序(是的,这是家庭作业)。这个问题要求我们在500X500窗口上随机创建100个粒子类对象,然后使用摇摆计时器移动它们。这是我遇到的问题,创建的粒子似乎不是随机的,但是它们沿着对角轴排列,我很难找到逻辑错误,非常感谢你的帮助。这是一个应该清楚的屏幕截图。 http://i57.tinypic.com/qswbix.jpg

如果有人发现我的问题难以理解,我也会在帖子末尾发布作业问题。谢谢你的帮助

public class ParticleFieldWithTimer extends JPanel{
    private ArrayList<Particle> particle = new ArrayList<Particle>();
    Timer timer; 
    boolean b; 
      public ParticleFieldWithTimer (){
       this.setPreferredSize(new Dimension(500,500));


    for(int i = 0; i < 100; i++) { 
        particle.add(new Particle());
    }


    timer = new Timer(40, new ActionListener() 
    {
        @Override
        public void actionPerformed(ActionEvent ae) {
            for (Particle p : particle) {                   
                p.move();                   
            }
            repaint();              
            }           
    });
    timer.start();  

}
   public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(Color.RED);

        for (Particle p : particle) {
        double temp1 = p.getX();
        double temp2 = p.getX();
        int tempX = (int) temp1;
        int tempY = (int) temp2;
        g2.fillRect(tempX, tempY, 3, 3);
        }           

    }
   public static void main(String[] args) {
        final JFrame f = new JFrame("ParticleField");
        final ParticleFieldWithTimer bb = new ParticleFieldWithTimer();
        f.setLayout(new FlowLayout());
        f.add(bb);
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                try {
                    bb.finalize();
                } catch (Throwable e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                f.dispose();
            }
        });
        f.pack();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

这是粒子类

 public class Particle {
private int x , y ;

Random r = new Random();

public Particle () {

    x = r.nextInt(500);
    y = r.nextInt(500);

}
public int getX() {
    return x;
}
public int getY() {
    return y;
}
public void move() {

    x += r.nextBoolean() ? 1 : - 1;
    y += r.nextBoolean() ? 1 : - 1;
    System.out.println("x : " + x+" y: " + y);
}



 }
  

创建一个具有两个双字段x和y的粒子,a   构造函数,将这些字段初始化为0之间的随机值   500,返回值的方法getX和getY,以及方法   void move()随机地为每个值添加或减去一个   x和y。 (添加到x和y的数量是两个单独的随机数   数字。)接下来,创建一个扩展的类ParticleFieldWithTimer   JPanel的。此类应该更喜欢500 * 500像素的大小。它的   构造函数应首先使用100填充ArrayList字段   粒子对象,然后启动一个滴答25次的Swing Timer   第二。在每个tick,动作监听器应首先调用该方法   移动每个粒子,然后调用重绘。 paintComponent   ParticleFieldWithTimer的方法应该将每个粒子绘制为3 * 3   矩形到它的当前坐标。

1 个答案:

答案 0 :(得分:3)

paintComponent方法中,

替换

double temp2 = p.getX();

double temp2 = p.getY();
祝你好运。