Как предотвратить одновременное появление нескольких диалогов? - PullRequest
2 голосов
/ 30 апреля 2009

Как можно избежать появления диалогового окна, если оно уже есть на экране?

Подробности: в моем приложении работает много таймеров. Если происходит фатальная ошибка, все затронутые потоки будут показывать JDialog (от swingx.JXErrorPane.showDialog ()), что нежелательно. Даже если я отменю все запущенные таймеры, некоторые диалоги появятся одновременно. Как мне добиться, чтобы там отображался только один диалог?

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

Ответы [ 2 ]

6 голосов
/ 30 апреля 2009

Превратите диалог в наблюдателя и опубликуйте события ошибок для этого нового наблюдателя (см. Шаблон проектирования наблюдателя ). Когда происходит событие, диалоговое окно должно показать себя (с основным кадром в качестве родителя). Показать последние ошибки в таблице в диалоговом окне. Добавьте новые ошибки в конец таблицы.

Другим вариантом является отображение ошибок в таблице в основном фрейме. Поместите таблицу в JSplitPane, чтобы пользователи могли ее свернуть.

0 голосов
/ 30 апреля 2009

Еще одним вариантом было бы превратить диалог в одноэлементный:

  • Дайте диалогу приватный конструктор.
  • Создать «частный статический экземпляр MyDialog;» - атрибут в диалоговом классе.
  • Создайте "открытый статический метод MyDialog getInstance () {...}; -, чтобы вернуть экземпляр и сначала создать его экземпляр, если он нулевой.

Где MyDialog должно быть именем класса диалогового окна.

Тогда каждый раз, когда вам нужно показать диалоговое окно, вы просто ссылаетесь на синглтон:

MyDialog.getInstance () ShowDialog ();.

Где showDialog просто делает диалоговое окно видимым.

...