Кажется, ваша проблема в том, что вы не рисуете последнюю линию, которую перетаскиваете.
В mouseDragged()
у вас есть это:
currentLine = new LineClass(currShapeX1,currShapeY1,event.getX(),event.getY());
lines[lineCount] = currentLine;
currentLine = null;
Это устанавливает линию наиндекс lineCount
до новой строки.
Тем не менее при рендеринге вы делаете это:
for(int count = 0; count < lineCount; ++count)
{
lines[count].draw(g);
}
Вы рисуете все линии, кроме той, которая находится в индексе lineCount
.
В mouseReleased()
тогда у вас есть lineCount++;
, и поэтому после отпускания мыши появляется строка.
Чтобы исправить это, я бы не добавил текущую перетаскиваемую линию в lines
при перетаскивании.Вместо этого просто обновите его в mouseDragged
.В mouseReleased
вы затем добавляете его в массив и устанавливаете currentLine
в null
.
Таким образом, рисование будет выглядеть так:
for(int count = 0; count < lineCount; ++count) {
lines[count].draw(g);
}
if( currentLine != null ) {
//you could set different rendering options here, e.g. a different color
currentLine.draw(g);
}
Наконец, вместо использования массиваможет быть лучше использовать List<LineClass>
.Таким образом, вам не нужно отслеживать текущий счетчик строк, не ограничиваться 100 строками и не изменять размер массива самостоятельно.
Поскольку список будет содержать только ненулевые строки, рендеринг может выглядеть следующим образом:
lines.forEach( line -> line.draw(g) );
if( currentLine != null ) {
currentLine.draw(g);
}