В Swing, есть ли способ временно заморозить перерисовку иерархии содержимого JComponent? - PullRequest
5 голосов
/ 15 сентября 2009

Если у меня есть набор пользовательских JComponents на панели Swing, и каждый из них может содержать много других JComponents, есть ли способ «заморозить» перерисовки на компонентах верхнего уровня, а затем разморозить их, вызвав перерисовку? 1001 *

Полагаю, я пытаюсь сделать что-то вроде локализованной двойной буферизации.

Ответы [ 2 ]

3 голосов
/ 15 сентября 2009

Кроме того, на всякий случай причина, по которой вы это делаете, заключается в том, что вы делаете кучу обновлений GUI для компонентов и беспокоитесь обо всех этих автоматически публикуемых repaints (), не делайте этого. repaint () не рисует сразу, он отправляет отложенное событие перерисовки в очередь событий AWT, которое объединит несколько перерисовок для заданного региона, чтобы избежать повторения одного и того же рисования снова и снова.

1 голос
/ 15 сентября 2009

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

Вы можете включить двойную буферизацию для каждого компонента JComponent за раз, используя метод setDoubleBuffered(boolean) этого компонента, вам не нужно ничего делать, если это все, что вам нужно.


Даже если вы отключите рисование на компоненте верхнего уровня путем переопределения рисования, оно не остановит дочерние компоненты от рисования, если они получают события; Вы можете заменить содержимое кадра статическим изображением (созданным с помощью вызова paint с графикой из буферизованного изображения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...