Нужна помощь в диагностике проблемы рисования на alt-tab в Swing - PullRequest
1 голос
/ 11 января 2011

Я изучал это несколько часов и не нашел ничего, что могло бы помочь мне. У меня есть программа Windows Swing GUI, которая выполняет некоторую фоновую обработку в SwingWorker. При этом также используется диалоговое окно прогресса, позволяющее пользователю узнать, сколько времени займет фоновая обработка.

Первоначальный разработчик этой системы решил отключить ввод мыши и клавиатуры в пользовательский интерфейс, за исключением кнопки «Отмена» в диалоговом окне выполнения. Они сделали это, используя стеклянную панель, которая игнорирует все события мыши и клавиатуры.

Фактическая проблема заключается в том, что в случае пользовательской alt-tabs или заставки пользовательский интерфейс за стеклом никогда не перерисовывается. Диалог хода выполнения перерисовывается, но это происходит из-за того, что SwingWorker периодически вызывает перерисовку для обновления хода выполнения.

Мне хотелось бы получить совет, куда обратиться. Я не смог найти что-нибудь о перерисовке alt-tab в Java. Возможно, диалог прогресса является модальным по определению, не позволяя перекрасить EDT? Или, возможно, стеклянная панель предотвращает перекрашивание «скрытых» компонентов?

Спасибо, Ryan

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Статья Как писать оконные прослушиватели охватывает эту тему.Используя этот пример , вы должны видеть пары оконных событий на каждом событии alt-tab, подобные этим:

java.awt.event.WindowEvent[WINDOW_LOST_FOCUS,opposite=null,oldState=0,newState=0] on One
java.awt.event.WindowEvent[WINDOW_DEACTIVATED,opposite=null,oldState=0,newState=0] on One
java.awt.event.WindowEvent[WINDOW_ACTIVATED,opposite=null,oldState=0,newState=0] on One
java.awt.event.WindowEvent[WINDOW_GAINED_FOCUS,opposite=null,oldState=0,newState=0] on One
1 голос
/ 11 января 2011

Если для прозрачного стекла установлено значение true, менеджер перекраски не будет перекрашивать панель ниже.Это оптимизация производительности.

...