Как предотвратить одновременное появление нескольких диалогов?

StackOverflow https://stackoverflow.com/questions/805738

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

MyDialog.getInstance().showDialog();

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top