Как нарисовать на буфере с возможностью отмены? - PullRequest
4 голосов
/ 19 февраля 2012

Хотя я не делаю анимацию и не рисую очень сложную графику.
Мне нужна (вроде) двойная буферизация для рисования нескольких примитивов.В приложении пользователь вводит имя Shape, сопровождаемое соответствующими аргументами, и эта фигура рисуется в буфере, а затем на экране.Например, команда RECT 100, 50, 200, 120.

. Для сохранения я могу сохранить все команды в списке и в
public void paintComponent(Graphics g) JPanel. Я рисую их по одной.из-за итерации по списку и использования хэш-карты каждый раз для вызова (или отправки) соответствующего интерфейса shape-drawing.

Как и на каком типе буфера можно рисовать?Как различные методы могут рисовать в этом буфере?

Кроме того, есть ли удобный способ отменить предыдущие операции рисования с помощью буфера?Или мне нужно перерисовывать в буфере каждый раз, когда отмена выполняется?

Спасибо, я не хочу полный код, но приветствуются соответствующие имена классов и небольшой псевдокод.

1 Ответ

6 голосов
/ 19 февраля 2012

JPanel по умолчанию с двойной буферизацией, поэтому выбор и перетаскивание обычно довольно плавные. GraphPanel - это простая программа для рисования объектов, которая иллюстрирует такие операции на List<Node>. Подобный подход был успешно использован с тысячами узлов.

Детали реализации стратегии undo значительно зависят от желаемого поведения, но remove() и repaint() эффективны.

Приложение: Одна общая оптимизация для рендеринга большого количества объектов использует шаблон веса в полете . JTable, JFreeChart и JGraph являются примерами. Этот упрощенный example иллюстрирует основной механизм.

...