3 Stimmen

Versuchen, eine ArrayList von Linien/Kreisen auf einem Jf zu animieren

enter image description here

A

import java.awt.*;
import javax.swing.JComponent;
import java.util.*;
import javax.swing.JFrame;
import java.awt.event.*;
import javax.swing.Timer;
public class VehicleComponent extends JComponent
{
   //Car class which is an arraylist of line segments and a couple circles
 Car car;
 // The constructor initializes the car to the location 300, 300 on a Jframe
     public VehicleComponent()
  {
     car = new Car(300, 300);
      drive();
  }

//to be painted on a jframe
public void paintComponent(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g;
        car.draw(g2);

}

//this function will be called in timer triggered actionListener. will move the car forward by certain pixels per given seconds
public void drive()
{
        car.move();
        repaint();

}
}        

public class Car extends Vehicle
{

ArrayList<Line2D.Double> detailLines;
ArrayList<Ellipse2D.Double> tires;
private int height;
private int length;
private int velocity;

public Car(int xStartingPosition, int yStartingPosition)
{
    super(xStartingPosition, yStartingPosition);
    detailLines = new ArrayList<Line2D.Double>();
    tires = new ArrayList<Ellipse2D.Double>();
    setVelocity();
    height = 5;
    length = 14;

}
/** draws the car */
public void draw(Graphics2D g2){
    BasicStroke tireStroke = new BasicStroke(3);
    BasicStroke vehicleStroke = new BasicStroke(2);
    initializeLines();
    initializeTires();

    g2.setStroke(vehicleStroke);
    for (Line2D.Double e : detailLines){
                g2.draw(e);
    }
    g2.setStroke(tireStroke);
    for (Ellipse2D.Double e: tires){
        g2.draw(e);
    }
}

private void initializeLines()
{
    detailLines.add(new Line2D.Double((getX()-10), (getY()+10), (getX()+50), (getY()+10)));//hood
    detailLines.add(new Line2D.Double((getX() + 60), getY(), (getX()+50), (getY()+10)));//hoodtwo
    detailLines.add(new Line2D.Double((getX()+50), (getY()+10), (getX()+70), (getY()+30)));//Passengerwindshield
    detailLines.add(new Line2D.Double((getX()+70), (getY()+30), (getX() + 80), (getY() + 20)));//hood three
    detailLines.add(new Line2D.Double((getX() + 70), (getY() + 30), (getX()+100), (getY()+30)));//front
    detailLines.add(new Line2D.Double((getX()+100), (getY()+30), (getX()+100), (getY()+40)));//front two
    detailLines.add(new Line2D.Double((getX()+100), (getY()+30), (getX() + 110), (getY() + 20)));//sideLine horizontal
    detailLines.add(new Line2D.Double((getX() + 60), (getY()+20), (getX()-20), (getY() + 20)));//windowsperator
    detailLines.add(new Line2D.Double((getX()+30), (getY()+10), (getX() +30), (getY() +20)));//striketrhough
    detailLines.add(new Line2D.Double((getX()), (getY()), (getX() +60), (getY())));//roof
    detailLines.add(new Line2D.Double((getX()+60), (getY()), (getX() +80), (getY() +20)));//border top
    detailLines.add(new Line2D.Double((getX()+80), (getY()+20), (getX() +110), (getY() +20)));//border 3
    detailLines.add(new Line2D.Double((getX()+110), (getY()+20), (getX() +110), (getY() +30)));//border4
    detailLines.add(new Line2D.Double((getX()+110), (getY()+30), (getX() +100), (getY() +40)));//border5
    detailLines.add(new Line2D.Double((getX()+100), (getY()+40), (getX() - 30), (getY() +40)));//border6
    detailLines.add(new Line2D.Double((getX()-30), (getY()+40), (getX() - 30), (getY() +30)));//border7
    detailLines.add(new Line2D.Double((getX()-30), (getY()+30), (getX()), (getY())));//border8

}
private void initializeTires()
{
    tires.add(new Ellipse2D.Double((getX()-10), getY()+30, 20, 20));
    tires.add(new Ellipse2D.Double((getX()+65), getY()+30, 20, 20));
}

public void move()
{

    for(Line2D.Double e : detailLines){
        e.setLine((e.getX1()+velocity), (e.getY1()), (e.getX2()+velocity), (e.getY2()));

    }
    for(Ellipse2D.Double e : tires)
    {
        e.setFrame((e.getX()+velocity), (e.getY()), e.getWidth(), e.getHeight());
    }

}

2voto

Andrew Thompson Punkte 166383
public void paintComponent(Graphics g)
{
    // Very important, paint the component BG etc.
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    // ...

1voto

Robin Punkte 3434

T JComponent .

Graphics.clearRect(0,0, getWidth(),getHeight());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X