![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| BezImeni |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
Есть класс - потомок JPanel он показывает лабиринт.
Чтобы процесс строительства можно было наблюдать paintComponent() вызвается через маленькие промежутки времени. Так вот когда такой код:
все работает, но если отключаю super.paintComponent() то прорисовка показывается кусками, не в реальном времени, а как бы суммируя несколько шагов и потом выводя их сразу. В чем причина? Оставлять вызов super не хочется, чтобы не обьявлять все поле недействительным - накладно. |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
кем вызывается? Если вы не сделаете вызов super.paintComponent(g); то потеряете часть функциональности. Например, придется самостоятельно следить за свойством прозрачности и за заливкой фона...
Очень может быть, поскольку графическая система перед тем как прорисовать область какого-либо компонента накапливает его "поврежденные регионы", далее рисует их одной операцией. Можно попробовать делать вызов paintImmediately,( но не из метода paintComponent) после каждого изменения... тут хотелось бы еще на код посмотреть. |
|||
|
||||
| BezImeni |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 195 Регистрация: 7.5.2006 Репутация: нет Всего: нет |
есть класс
и есть
т.е. при изменении в модели лабиринта, вид будет перерисован. В начале у меня лабиринт состоит из клеток, каждая из которых имеет 4 стены. Потом начинается строиться лабиринт - убираются стенки между клетками. Процесс постойки хочу показать, и для этого при каждом вызове paintComponent .... drawCells() - хочу рисовать только те клеточки, которые изменились. Как понимаю super.paintComponent() кроме прочего стирает все на экране, и значит что все клетки опять должны быть отрисованы. Поэтому и хотел его убрать. Что тут можно сделать поумнее? |
||||||
|
|||||||
| newObject |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 29.6.2006 Репутация: 1 Всего: 2 |
Есть такая штука как двойная буферизация.
Это означает, что сначала компоненты прорисовываются в памяти, а затем картинка выводится на экран! По этому и происходит рисование "поврежденных областей" целиком. Это раз. Два двойная буферизация отключается
Три есть класс для отладки графических компонентов Swing DebugGraphics! Пример:
|
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |