2013-11-21 5 views
-1

Я ищу для создания нескольких прямоугольников, используя объект Rectangle.Создание нескольких прямоугольников в JAVA

Вот то, что я до сих пор:

public void paint(Graphics g) { 
    super.paint(g); 
    for(int x = 0; x<= cars.size()-1; x++) 
    { 
     Rectangle r = new Rectangle(); 
     r.setBounds((int) cars.get(x).getX(), (int) cars.get(x).getDistance(), 10, 20); 
     g.fillRect( (int) r.getCenterX(), (int) r.getCenterY(), (int) r.getWidth(), (int) r.getHeight()); 
    } 
} 

мне нужен объект Rectangle, поэтому я могу использовать его для обнаружения столкновения с другим автомобилем. Приведенное выше рисует прямоугольные «автомобили». Мне нужен еще один меньший прямоугольник, но с другим цветом. Поэтому я также хотел бы включить цвет в это. Есть предположения?

ответ

0

Ну, во-первых, вы, вероятно, не должны звонить new в свой код визуализации каждый раз, когда вам нужен прямоугольник. Держите List определенного пользовательского типа на уровне класса и поддерживайте отдельные экземпляры этого.

class Foobar { 
    private List<Car> cars; 
    public Foobar() { 
    // create your cars, put them in the list 
    } 

    public void paint(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    for (Car car : cars) { 
     g2d.setColor(car.color); 
     g2d.fill(car.rect); 
    } 
    } 
} 

class Car { 
    Rectangle rect; 
    Color color; 
    // constructors etc. 
} 
+0

Я понимаю. Но не создаст ли это несколько прямоугольников со всем одинаковым цветом? Причина в том, потому что я хотел сделать меньший прямоугольник внутри того, что сделал с другим цветом; в значительной степени, чтобы показать центр. – Dimitri

+0

Нет. Вот почему вы унаследовали разные экземпляры класса «Car» - каждый из них имеет свой собственный цвет, связанный с ним. Для второго прямоугольника вы можете просто добавить его в качестве переменной экземпляра в класс 'Car'. – yamafontes

+0

О, я вижу сейчас, да. Это здорово, спасибо. – Dimitri

1

Просто добавьте атрибут Color вам Car класс.

Вы должны избегать переопределение метода paint и вместо этого использовать paintComponent, проверьте Performing Custom Painting для получения более подробной информации

Если вы перекрывая paint контейнера верхнего уровня, вы действительно должны двигаться вы пишете что-то вроде JPanel вместо , если не по какой-либо другой причине, это двойной буфер.

Смежные вопросы