.. нарисуйте 2 строки
blockquote>Это похоже на суть вопроса в этом вопросе.
Сохраняйте набор строк в расширяемом списке (например,
ArrayList
) при нажатии / перетаскивании, добавлении новой строки в список и вызовеrepaint()
. ВpaintComponent(Graphics)
повторите сбор и рисуйте каждую строку.BTW - Я предполагаю, что вы не минимизировали и не восстановили свое окно во время тестирования. Ваши строки (красивые или уродливые) исчезнут!
.. они исчезли. В чем причина?
blockquote>Методы
paint()
иpaintComponent()
вызываются всякий раз, когда GUI нужно перерисовывать. Они могут быть вызваны после того, как перед окном появится другое окно, затем оно возвращается на передний план. В другой раз после восстановления из минимума.Параметры сохранения строк включают в себя:
- Хранить местоположения линий (линий) и перерисовывать их все при каждом запросе (как описано выше). Это может работать для большинства целей.
- Нарисуйте каждую строку до
BufferedImage
и поместите изображение (вImageIcon
в)JLabel
. Этот подход хорошо работает, если область рисования имеет фиксированный размер & amp; ничто никогда не удаляется и может вмещать ... миллионы линий, дуг, полупрозрачных областей, меньших изображений, текста. Используя изображение как поверхность рендеринга, вам больше не понадобитсяArrayList
, поскольку все, что вы делаете, это добавьте новую строку в изображение и перерисуйте ярлык, чтобы увидеть новую строку и все предыдущие строки... строка не является прямой.
blockquote>Это из-за «подсказок рендеринга», используемых при рисовании строки. Экран, сделанный из выровненных рядов пикселей, может только идеально делать вертикальные или горизонтальные линии. Чтобы дать «иллюзию» прямой & amp; непрерывная линия под любым другим углом, требует метода, известного как сглаживание . Прочтите открывающие секции
Graphics2D
для более подробного объяснения и описанияRenderingHints
.