2013-12-11 3 views
0

Я создал простую программу в Java для рисования Графические примитивы (Линии, Прямоугольники, Эллипсы и т. Д.). Формы рисуются на экране, перетаскивая мышь и сохраняются в массив Shapes, поэтому я добавил слайдер для получения динамического размера штриха (от 1 до 20 с 1 значением по умолчанию), но он обновляет все фигуры, которые были ранее нарисованы.Обновление динамического размера динамического массива в Java

// ПРИМЕЧАНИЕ1: График Graphics2D; определяется в классе, простирающейся JFrame

// Примечание 2: Значение strokeSize динамически изменяется с помощью ползунка

public void paint(Graphics g) 
      { 

        graph = (Graphics2D)g; 

        graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALIAS_ON); 

        graph.setStroke(new BasicStroke(strokeSize)); 

for (Shape currentShape : shapes) 
        { 
         graph.setPaint(strokeCounter.next()); 

         graph.draw(currentShape); 

         graph.setPaint(fillCounter.next()); 

         graph.fill(currentShape); 
        } 


//What follows are If statements for choosing a shape 

//and actual methods for drawing them... 

Так что мой вопрос: Как обновить strokeSize, но только для форм в настоящее время разрабатывается?

+0

Где определяется 'strokeSize'? –

+0

В классе, расширяющем JFrame перед конструктором. – user3086760

ответ

0

Сохраните размер хода вместе с формой. Задайте размер хода перед выдачей команды рисования.

+0

Вы хотите поставить: graph.setStroke (новый BasicStroke (strokeSize)); выше graph.draw (currentShape); ? Я уже пробовал это, но он по-прежнему обновляет strokeSize для уже нарисованных фигур. – user3086760

+0

Должно быть, вы должны помещать его в неправильное место. Убедитесь, что он находится внутри цикла, но до розыгрыша. –

+0

Ну, Да, это внутри цикла, но все равно не работает должным образом. – user3086760

0

Добавить graph.setStroke(new BasicStroke(currentShape.getStrokeSize())); перед тем graph.draw(currentShape);

Вам нужно добавить свойство StrokeSize к вашему Shape класса.

+0

Форма не является классом. У меня есть массив фигур: ArrayList shapes = new ArrayList (); – user3086760

+0

@ user3086760 Вы не сможете использовать его с 'ArrayList', если это не класс. Я думаю, вам нужно определить новый класс, который будет содержать ваш «Shape» и его размер штриха. –

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