2015-11-18 7 views
1

В этой программе, которую я делаю, мне нужно заполнить фигуры случайными цветами. Я смущен тем, как на самом деле заполнить форму. Я могу генерировать случайный цвет. Я просмотрел информацию в Интернете и нашел, что некоторые источники рассказывают о внедрении интерфейса Paint и используют метод setPaint() в форме, которую вы хотите сделать, а затем вызывают метод fill. Я пробовал это, но не увенчался успехом. Возможно, я просто ошибся. Вот что я имел.Заполните фигуру случайным цветом в java

Random rand = new Random(); 
float r = rand.nextFloat(); 
float g = rand.nextFloat(); 
float b = rand.nextFloat(); 

Color randomColor = new Color (r, g, b); 

Это было в конструкторе суперкласса, где я на самом деле имеют randomColor как атрибут класса. Поэтому для доступа к этому элементу в подклассе я предоставляю базовый getter, который просто возвращает Color.

В подклассе у меня есть это:

Rectangle2D.Double rectangle = new Rectangle2D.Double(getX(), getY(), getWidth(), height); 
rectangle.setPaint(getColor()); 
rectangle.fill(); 
g2.draw(rectangle); 

Ошибка я получаю что-то о типажей rectangle но любой напечатанный я стараюсь это не работает. Я не совсем уверен, как решить эту проблему. Есть идеи? Или есть более простой/лучший способ заполнить фигуру случайным цветом? Благодарю.

+0

Не будет 'rand.nextInt (256);' больше смысла? – JonK

+0

Типизация не имеет ничего общего со случайными цветами. Покажите нам точную ошибку, которую вы получите, и код, который находится. – zapl

ответ

1

Вы должны называть методы, которые вы вызываете на прямоугольнике на Graphics2D

Rectangle2D.Double rectangle = new Rectangle2D.Double(getX(), getY(), getWidth(), height); 
g2.setPaint(getColor()); 
g2.fill(rectangle); 
g2.draw(rectangle); 
+0

Aweomse! Это сработало. Огромное спасибо. Это намного проще, чем то, что я пытался сделать. Как вы узнали, как использовать методы 'SetPaint' и' fill' на 'g2', а не' rectangle'? – GenericUser01

+0

Потому что я сделал это раньше: http://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/ui/shape/ – ControlAltDel

+0

У меня есть другой вопрос, что я только что заметил с моей программой сейчас. То, как у меня было, прежде чем я наполнил фигуру цветом, когда вы нажимали на фигуру, форма была переведена вниз и направо на 1 пиксель каждый, а затем многократно перерисовывалась, чтобы показать, что она была выбрана. Вот как это выглядит (на самом деле это мой экран, так что это моя программа работает в настоящее время): https://gyazo.com/0af4f9b88acdaf682f763a255df38202 Проблема, с которой я сталкиваюсь сейчас, состоит в том, что вся форма заполнена цветом, поэтому когда он выбран, тогда он просто перерисовывается с тем же цветом, чтобы вы не могли сказать. – GenericUser01

1

Мне нужно, чтобы иметь возможность заполнить формы со случайными цветами

Затем вы должны создать класса (ColoredShape), который содержит два свойства:

  1. Форма
  2. Цвет

Тогда вы можете создать ArrayList для хранения экземпляров этого класса.

ArrayList<ColoredShape> shapes = new ArrayList<ColoredShape>(); 
shapes.add(new ColoredShape(aShape, generateRandomColor()); 
shapes.add(new ColoredShape(anotherShape, generateRandomColor()); 

Затем в методе paintComponent() из панели вы перебирать ArrayList и расписывать все формы:

for (ColoredShape shape: shapes) 
{ 
    g2.setColor(shape.getColor()); 
    g2.draw(shape.getShape()); 
} 

Для рабочего примера такого подхода проверить DrawOnComponent пример найден в Custom Painting Approaches ,

+0

Я думаю, что это ошибка: ArrayList shapes = new ArrayList (); – ControlAltDel

+0

@ControlAltDel, oops, fixed :) – camickr

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