PIbd-22_Chernyshev_G.J._29_.../Trolleybus/BusesGenericCollection.java
2023-12-01 19:42:28 +03:00

94 lines
3.6 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package Trolleybus;
import java.awt.*;
import javax.swing.*;
// Параметризованный класс для набора объектов DrawingBus
public class BusesGenericCollection <T extends DrawingBus, U extends IMoveableObject> {
private final int _pictureWidth;
private final int _pictureHeight;
private final int _placeSizeWidth = 150;
private final int _placeSizeHeight = 95;
private final SetGeneric<T> _collection;
public BusesGenericCollection(int picWidth, int picHeight)
{
int width = picWidth / _placeSizeWidth; //width - кол-во помещаемых на PictureBox автобусов по горизонтали
int height = picHeight / _placeSizeHeight; //height - кол-во помещаемых на PictureBox автобусов по вертикали
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_collection = new SetGeneric<T>(width * height); //width*height - кол-во мест на PictureBox для автобусов; размер массива
}
//На Java нельзя перегрузить операторы + и -, поэтому ниже обычные методы
public int Add(T obj){
if (obj == null) {
return -1;
}
return _collection.Insert(obj);
}
public boolean Remove(int position) {
T obj = _collection.Get(position);
if (obj != null) {
_collection.Remove(position);
return true;
}
return false;
}
public U GetU(int pos){
return (U)_collection.Get(pos).GetMoveableObject();
}
public T Get(int position) {
if (position < 0 || position >= _collection.Count) {
return null;
}
return _collection.Get(position);
}
//Вывод всех объектов
public void ShowBuses(JPanel panelToDraw) {
Graphics gr = panelToDraw.getGraphics();
//Очистка перед перерисовкой
panelToDraw.paint(gr);
DrawBackground(gr);
DrawObjects(gr);
}
//Прорисовка фона (чёрных линий)
private void DrawBackground(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLACK);
//вертикальные линии
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++)
{
g2d.drawLine(i * (_placeSizeWidth + 10), 0, i * (_placeSizeWidth + 10), (_pictureHeight / _placeSizeHeight) * (_placeSizeHeight + 10));
}
//горизонтальные линии
for (int i = 0; i <= _pictureHeight / _placeSizeHeight; i++)
{
for (int j = 0; j < _pictureWidth / _placeSizeWidth; j++)
{
g2d.drawLine(j * (_placeSizeWidth + 10), i * (_placeSizeHeight + 10), j * (_placeSizeWidth + 10) + _placeSizeWidth / 2, i * (_placeSizeHeight + 10));
}
}
}
//Прорисовка объектов
private void DrawObjects(Graphics g) {
int i = 0;
int j = _pictureWidth / _placeSizeWidth - 1;
for (int k = 0; k < _collection.Count; k++)
{
DrawingBus bus = _collection.Get(k);
if (bus != null)
{
bus.SetPosition(j * (_placeSizeWidth + 10) + 5, i * (_placeSizeHeight) + 10);
bus.DrawTransport(g);
}
j--;
//переход на новую строчку
if (j < 0)
{
j = _pictureWidth / _placeSizeWidth - 1;
i++;
}
}
}
}