Ява: Как использовать метод paint () для обновления ранее нарисованного объекта? - PullRequest
1 голос
/ 09 ноября 2010

Как использовать paint (), чтобы при вызове repaint () ранее нарисованный объект не удалялся при рисовании нового объекта.То есть область рисования должна быть ОБНОВЛЕНА только, а не ИЗМЕНЕНА.

В моем коде, когда нажата одна из множества кнопок, отображается какой-то алфавит.Я хочу, чтобы функциональность была такой, чтобы при нажатии на другие кнопки должны присутствовать ранее нарисованные алфавиты. Все равно, что при нажатии кнопок создается строка алфавитов.Я использую Java Swing для кодирования.

Часть моего кода:

if(source == btnAlpha[i] )  
bollyDraw.repaint(); //bollydraw is an object of a JPanel extended class having implemented the paintComponent(Graphics g) method

В методе paint ():

if (word[i] == key) {
g.drawChars(word, i, 1, x, y);
}

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

В проекте, над которым я работал, я использовал List для хранения объектов, которые должны были быть нарисованы как члены класса.Затем, когда пользователь взаимодействовал с моим пользовательским интерфейсом, я добавил / удалил элементы из этого списка.JPanel, который отображал элементы, рисовал элементы, которые были в этом списке.Это помогает отделить логику пользовательского интерфейса от логики рисования, поскольку вы можете определить, что входит в список рисования при возникновении события, а не в методе рисования (который должен быть максимально чистым).Однако это заставит вас перекрашивать все при каждом вызове рисования.

В сочетании с этим RepaintManager Кима - отличный способ ограничить то, что перерисовывается.Он основан на регионах, поэтому есть некоторая сложность в определении того, какая область экрана изменилась.Если у вас есть время, лучше использовать что-то подобное, иначе может быть сложно добавить эту функцию в будущем.

1 голос
/ 09 ноября 2010

Индивидуальные подходы к рисованию показывает несколько способов сделать это в зависимости от ваших точных требований.

1 голос
/ 09 ноября 2010

Ваше приложение должно быть готово перерисовать все, что оно нарисовало. Из вашего описания, я боюсь, это означает, что вы должны следить за всем, что вы нарисовали.

Поведение Swing частично продиктовано соответствующим оконным менеджером и графической системой, которая в любой момент может покрасить область, в которой присутствует ваше приложение. Вы можете переопределить update () для управления перерисовками, инициированными вашим собственным приложением, и, возможно, сможете повысить производительность, внедрив собственный RepaintManager.

Этот урок объясняет живопись Swing более подробно: http://java.sun.com/products/jfc/tsc/articles/painting/

...