JAVA: Как использовать метод paint() для обновления ранее нарисованного объекта?

Как использовать 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);
}

person Gaurav Navgire    schedule 09.11.2010    source источник


Ответы (3)


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

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

person Heath Lilley    schedule 09.11.2010

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

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

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

person Kim Burgaard    schedule 09.11.2010

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

person camickr    schedule 09.11.2010