如何单独访问对象变量的所有不同实例?

时间:2014-08-03 19:46:14

标签: java swing object

我在初始化方法中生成100个椭圆作为粒子,然后我想将它们移动一定量(比方说x)进行n次迭代。我写了以下代码片段来做到这一点。

private void drawNParticles(Graphics g)
    {   
        ArrayList<Integer> list;        
        list = new ArrayList<Integer>(Collections.nCopies(n, 0));
        for(int i=0;i<list.size();i++)
        {
           generateParticle(g);
        }
    }

private void generateParticle(Graphics g)
{
    int radius = 4;
    ArrayList<Integer> list= new ArrayList<Integer>();
    list=positionParticles(particle_x,particle_y);
    g.setColor(Color.RED);
    g.fillOval(list.get(0),list.get(1), radius, radius);
}

private ArrayList<Integer> positionParticles(int x, int y)
{
    int radius = 4;
    ArrayList<Integer> list= new ArrayList<Integer>();
    if(this.particle_counter==0)
    {
        x=randomInteger(2,678); // bounds of x between which the particles should be generated
        y=randomInteger(2,448); // bounds of y between which the particles should be generated
        x=x-(radius/2);
        y=y-(radius/2);
        if((x<251&&x>149)&&(y<266&&y>224))
        {
            x=0;
            y=0;
            positionParticles(x,y);
        }
        if((x<541&&x>499)&&(y<401&&y>299))
        {
            x=0;
            y=0;
            positionParticles(x,y);
        }
        this.particle_counter++;
    }
    else
    {
        setXPosition_particle(x);
        setYPosition_particle(y);
    }
    list.add(x);
    list.add(y);
    return list;
}

public void setXPosition_particle(int x)
    {
        this.particle_x=x+5;
        System.out.println("Particle_X:"+this.particle_x);
    }

public void setYPosition_particle(int y)
{
    particle_y=y+5;
    System.out.println("Particle_Y:"+this.particle_y);
}   

我想要的是每个粒子的位置应该增加5.但是在输出中,每个粒子都获得相同的值。我的JPanel上有一条对角线。如何单独访问每个实例变量?

output image

2 个答案:

答案 0 :(得分:2)

为什么不创建一个Particule类并维护一个List<Particule>

答案 1 :(得分:1)

你的第一个for循环正在搞乱,就像generateParticle方法一样。您应该将索引i传递给方法,您不应该在generateParticle方法中创建一个新的且完全不相关的ArrayList,而是使用方法内部的ArrayList类字段list。

我还建议您不要使用paint或paintComponent方法移动粒子,因为您无法完全控制何时或是否调用它。而是通过在Swing Timer中执行移动声明来分离粒子的移动和它们的绘制,然后简单地在paintComponent方法中迭代List,绘制每个点。