Я закончил со случайными кругами, теперь моя задача состоит в том, чтобы добавить круги в очередь с прямыми линиями, как настоящая очередь (я хочу, чтобы круги стояли в очереди слева направо, предпочтительно в верхней части фрейма. Когда я вызываю removeCircle(), я хочу, чтобы круг покинул очередь и переместился вниз по кадру. Вы можете помочь мне с методами addCircle () и removeCircle (). Заранее спасибо.
public class AirTrafficLanding
{
private static void createAndShowUI()
{
PlanePanel panel = new PlanePanel(1);
JFrame frame = new JFrame("Air traffic Landing System");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.add( panel );
frame.pack();
frame.setVisible( true );
panel.startAnimation();
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
static class PlanePanel extends JPanel implements ActionListener
{
private ArrayList<Plane> planes = new ArrayList<Plane>();
public PlanePanel(int planeCount)
{
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setLayout( null );
setBackground( Color.BLACK );
Random random = new Random();
for (int i = 0; i < planeCount; i++)
{
Plane plane = new Plane();
plane.setRandomColor(true);
plane.setLocation(0, 700);
//plane.setLocation(random.nextInt(screenSize.width), random.nextInt(screenSize.height));
plane.setMoveRate(32, 32, 1, 1, true);
plane.setSize(32, 32);
planes.add( plane );
}
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
for (Plane plane: planes)
{
plane.draw(g);
}
}
public void startAnimation()
{
Timer timer = new Timer(55, this);
timer.start();
}
public void actionPerformed(ActionEvent e)
{
move();
repaint();
}
private void move()
{
for (Plane plane : planes)
{
plane.move(this);
}
}
}
static class Plane
{
public Color color = Color.BLACK;
public int x = 0;
public int y = 0;
public int width = 1;
public int height = 1;
private int moveX = 1;
private int moveY = 1;
private int directionX = 1;
private int directionY = 1;
private int xScale = moveX;
private int yScale = moveY;
private boolean randomMove = false;
private boolean randomColor = false;
private Random myRand = null;
public Plane()
{
myRand = new Random();
setRandomColor(randomColor);
}
public void move(JPanel parent)
{
int iRight = parent.getSize().width;
int iBottom = parent.getSize().height;
x += 5 + (xScale * directionX);
y += 5 + (yScale * directionY);
if (x <= 0)
{
x = 0;
directionX *= (-1);
xScale = randomMove ? myRand.nextInt(moveX) : moveX;
if (randomColor) setRandomColor(randomColor);
}
if (x >= iRight - width)
{
x = iRight - width;
directionX *= (-1);
xScale = randomMove ? myRand.nextInt(moveX) : moveX;
if (randomColor) setRandomColor(randomColor);
}
if (y <= 0)
{
y = 0;
directionY *= (-1);
yScale = randomMove ? myRand.nextInt(moveY) : moveY;
if (randomColor) setRandomColor(randomColor);
}
if (y >= iBottom - height)
{
y = iBottom - height;
directionY *= (-1);
yScale = randomMove ? myRand.nextInt(moveY) : moveY;
if (randomColor) setRandomColor(randomColor);
}
}
public void draw(Graphics g)
{
g.setColor(color);
g.fillOval(x, y, width, height);
}
public void setColor(Color c)
{
color = c;
}
public void setLocation(int x, int y)
{
this.x = x;
this.y = y;
}
public void setMoveRate(int xMove, int yMove, int xDir, int yDir, boolean randMove)
{
this.moveX = xMove;
this.moveY = yMove;
directionX = xDir;
directionY = yDir;
randomMove = randMove;
}
public void setRandomColor(boolean randomColor)
{
this.randomColor = randomColor;
switch (myRand.nextInt(3))
{
case 0: color = Color.ORANGE;
break;
case 1: color = Color.GREEN;
break;
case 2: color = Color.RED;
break;
default: color = Color.BLACK;
break;
}
}
public void setSize(int width, int height)
{
this.width = width;
this.height = height;
}
}
}
Я ожидаю начать с нуля окружностей в очереди и добавить один кружок с интервалом в 10 секунд. Я хочу, чтобы один кружок перемещался из очереди в нижнюю часть очереди через каждые 15 секунд. Я закончил со случайными кружками,Теперь моя задача состоит в добавлении окружностей в очередь с прямыми линиями, как в реальной очереди (я хочу, чтобы круги располагались в очереди слева направо, предпочтительно в верхней части фрейма. Когда я вызываю removeCircle (), я хочу, чтобы круг покинулочереди и двигаться вниз по кадру. Можете ли вы помочь мне с методами addCircle () и removeCircle (). Заранее спасибо.