Объединяет ли java несколько вызовов repaint () в один repaint ()? - PullRequest
0 голосов
/ 28 апреля 2020

Я получаю сотни событий в секунду в течение нескольких секунд, каждое из которых обновляет мою модель. Если после каждого события я вызову repaint() внутри invokeLater(), будет ли перерисовываться вызов сотни раз в секунду? Достаточно ли он умен, чтобы понять, что у него 500 резервных копий repaint(), и ему нужно только 1? Я не знаю, когда события будут приостановлены, но я хочу обновлять интерфейс только с разумной скоростью. Я могу реализовать будущее, которое будет обновляться до тех пор, пока не наступит достаточно долгая пауза, скажем, 500 ms, но если java уже делает это, то почему я должен?

1 Ответ

1 голос
/ 28 апреля 2020

Документация является таким хорошим источником информации.

Из javado c из repaint():

Примечание: Для получения дополнительной информации о механизмах рисования, используемых AWT и Swing, включая информацию о том, как написать наиболее эффективный код рисования, см. Рисование в AWT и Swing .

С Рисование в AWT и Swing

Программа вызывает repaint() для компонента, который регистрирует асинхронный запрос к AWT о необходимости перекраски этого компонента.

AWT вызывает поток диспетчеризации событий для вызова update() компонента.

ПРИМЕЧАНИЕ: Если несколько вызовов repaint() происходят в компоненте до обработки начального запроса на перерисовку, несколько запросов могут быть свернуты в один вызов update(). Алгоритм определения, когда несколько запросов должны быть свернуты, зависит от реализации. Если несколько запросов свернуты, результирующий прямоугольник обновления будет равен объединению прямоугольников, содержащихся в свернутых запросах.

...