У меня возникли некоторые странные проблемы с перерисовкой в приложении Swing, которое я разрабатываю. Я обнаружил, что когда я устанавливаю текст определенного компонента (это просто текстовая метка строки состояния в самом низу окна), вся таблица в совершенно другой области экрана получает указание перекрасить. Это вызывает некоторые проблемы с производительностью, потому что кажется, что в основном все окно просят перекрасить каждый раз, когда я устанавливаю текст строки состояния.
Я бродил по RepaintManager, пытаясь выяснить, что происходит, и обнаружил, что весь мой основной JPanel помечается как грязный компонент, когда я пытаюсь установить метку этого текста. Однако у меня возникают проблемы с отладкой на , в какой точке это происходит, и точно , почему это происходит вообще. Я пытался прочитать о системах перерисовки, но не могу определить, почему было бы необходимо перерисовывать неперекрывающуюся таблицу, когда установлена какая-то другая текстовая метка.
Я использовал Swing Explorer, чтобы попытаться визуализировать границы макета, чтобы удостовериться, что все не перекрывается каким-то сумасшедшим образом, и все выглядит хорошо.
Я ищу подход, чтобы определить, какая последовательность вызовов запрашивает перерисовку JTable. Когда я добавляю точку останова к его paintComponent () и поднимаюсь по стеку, я в конечном итоге в вызове RepaintManager paintDirtyRegions (), в котором весь мой основной JPanel (который содержит все в окне) находится внутри переменной tmpDirtyComponents.
Кто-нибудь может объяснить, как вся моя JPanel могла быть помечена как грязная, когда я изначально просто устанавливал одну текстовую метку статуса? Если нет, не могли бы вы дать некоторые указания относительно того, где можно подключиться, чтобы найти ошибку?
Большое спасибо за любую помощь, которую вы можете оказать!