Как проверить, кто отправляет событие repaint () в Swing? - PullRequest
0 голосов
/ 02 октября 2018

Я написал собственный компонент, который расширяет JPanel и переопределяет его метод paint ().Теперь я вижу, что этот метод вызывается один раз в 10 миллисекунд, когда отображается компонент.В компоненте ничего не меняется, но функция paint () все еще вызывается.У меня есть несколько вызовов repaint (), но на самом деле ни один из них не вызывается.Как узнать, что вызывает такие частые обновления?

ОБНОВЛЕНИЕ! В моем коде была ошибка.Я обновлял метод form () внутренних компонентов, чтобы он был основной причиной непрерывного перекрашивания.Но все же на вопрос не дан ответ: как понять, что поставляет события в очередь?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

как понять, что поставляет события в очередь?

При каждом изменении свойства компонента Swing компонент автоматически вызывает repaint() для себя.Запрос краски передается в RepaintManager.

RepaintManager затем объединит несколько запросов на перекрашивание в одну картину всех компонентов.Консолидация выполняется для повышения эффективности рисования.

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

Выможете прочитать Живопись в AWT и Swing для более подробного объяснения.

0 голосов
/ 02 октября 2018

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

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