在ArrayList中绘制新图形

时间:2018-06-06 18:03:25

标签: java animation arraylist graphics

我有一个应用程序,其中一辆汽车在一个面板上移动并产生声波 - 圆圈。我想要 : 1)打开框架时有几个圆圈 2)当选择“开始”按钮时,我希望它们移动,我希望一个接一个地创建更多的圆圈,直到选择停止按钮

问题是: 1)当框架打开时有5个圆圈,但它们完全不移动 2)出现5个新圆圈,但是从相同的XY位置,它们只是更大 - 我想要一个接一个的圆圈,它会增长,然后出现下一个圆圈

这是我的代码,我会感谢一些有用的样本,或者你能告诉我我的错误在哪里。我使用5的量只是为了得到一些波浪样本。

public class WaveParameters {

int xPos=0;
 int yPos = 375;
int width=60;
int height=60;
int velX = 0 ;
private Color color = Color.WHITE;

public int getVelX() {
    return velX;
}
public void setVelX(int velX) {
    this.velX = velX;
}
public int getX() {
    return xPos;
}
public void setX(int xPos) {
    this.xPos = xPos;
}
public int getWidth(){
   return width;}
public int getHeight(){
   return height;}
public void setWidth(int width) {
    this.width = width;
}
public void setHeight(int height) {
    this.height = height;
}
public Color getColor() {
    return color;
}
public void setColor(Color color) {
    this.color = color;
}
public void paint(Graphics g){
   g.setColor(getColor());
   g.drawOval(xPos,yPos,width/2,height/2);
}
}

这是动画小组:

public class PanelAnimation extends JPanel implements ActionListener{

List<WaveParameters> waves = new ArrayList<WaveParameters>();


public PanelAnimation(ResourceBundle bundle) {
    super();
    resourceBundle = bundle;    

    t.start();

    try {                
        imageBackground = ImageIO.read(newFile("bg.png"));
       } catch (IOException ex) {
            // handle exception...
       }    

    }
    CarParametrs pAuto = new CarParametrs();
    HumanParametrs pHuman = new HumanParametrs() ;
    Timer t = new Timer(60,this);
    //WaveParameters pWave = new WaveParameters();
    private BufferedImage imageBackground;
    MainFrame mf;

    public void addAuto(){
        CarParametrs ap = new CarParametrs();
        ap.setX(0);
        pAuto = ap;
    }
    public void addHuman(){
        HumanParametrs acz = new HumanParametrs();
        acz.setX(0);
        pHuman = acz;
    }
    public void addWave() {
        for (int i=0; i<5; i++) {

        WaveParameters wave = new WaveParameters();
    //  wave.setX(pAuto.xPos);
        wave.setColor(Color.white);
        wave.setWidth(wave.width*i);
        wave.setHeight(wave.height*i);
        waves.add(wave);
    }

    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(imageBackground, 0, 0, null);
        pAuto.paint(g);
        pHuman.paint(g);

        //if(mf.buttonStart.isSelected()) {
        addWave();
        //for (int i=0; i<5; i++) {
        for (WaveParameters w : waves) {
        //  waves.add(new WaveParameters());
            w.setX(pAuto.xPos);
            w.paint(g);
        //}
        }       
        //}
    }



public void actionPerformed(ActionEvent e) {        
        CarParametrs  pa = pAuto;
        pa.xPos += pa.velX;


        /*//WaveParameters wp = pWave;
        wp.xPos = pa.xPos;
        wp.xPos+=wp.velX;

        wp.height+=wp.velX;
        wp.width+=wp.velX;

        wp.yPos-=wp.velX/5 ;*/
        for (WaveParameters w : waves) {

            w.xPos = pa.xPos;
            w.xPos+=w.velX;

            w.height+=w.velX;
            w.width+=w.velX;

            w.yPos-=w.velX/5 ;
        }
        repaint();
    }

这是开始按钮的动作侦听器的波形部分:

List<WaveParameters> wave = panelAnimation.waves;
                        for (WaveParameters w : wave) {
                            for (int i=0;i<5;i++) {
                                wave.add(new WaveParameters());
                                w.velX = Integer.parseInt(button2.getName());
                                w.xPos += w.velX;
                                w.width++;
                                w.height++;
                                w.yPos-=w.velX/5;
                            }


                        }

                        panelAnimation.repaint();

1 个答案:

答案 0 :(得分:0)

出现的五个新的大圆圈可能是由于您在面板动画中迭代所有波浪的最后一块代码。

&#34; wave.add(new WaveParameters());&#34;似乎没必要,也许是你的旧浪潮停留的原因。删除该行,它可能会起作用。