Como prevenir várias caixas de diálogo para aparecer ao mesmo tempo?
-
03-07-2019 - |
Pergunta
Como posso evitar que uma caixa de diálogo é mostrada, quando já existe um na tela?
Detalhes: Na minha aplicação muitos temporizadores estão em execução. Se ocorrer um erro fatal, todos os segmentos afetados vão mostrar um JDialog (por swingx.JXErrorPane.showDialog ()), o que não é desejado. Mesmo se eu cancelar todos os temporizadores que funcionam, ainda alguns diálogos aparecerá ao mesmo tempo. Como posso conseguir que só irá aparecer um diálogo?
Eu tentei fazer o método que chama showDialog () sincronizados, o que resulta em toda a minha GUI sendo bloqueado. Uso de uma bandeira não quer trabalhar.
Solução
Vire o diálogo para um observador e publicar os eventos de erro a este novo observador (veja a Observer Design Pattern ). Quando um evento acontece, o diálogo deve mostrar-se (com o quadro principal como o pai). Exibir os erros recentes em uma tabela na caixa de diálogo. Adicionar novos erros para o fundo da tabela.
Outra opção é para exibir os erros em uma tabela no quadro principal. Coloque a tabela em uma JSplitPane que os usuários possam minimizá-lo.
Outras dicas
No entanto, outra opção seria a de transformar o diálogo em um singleton:
- Dê o diálogo um construtor privado.
- Crie uma "instância MyDialog estática privado;" -. Atributo na classe de diálogo
- Criar um "public static MyDialog getInstance () {...}; -. Método para retornar a instância eo primeiro instanciar-lo se ele é nulo
Onde MyDialog deve ser o nome de classe da janela de diálogo.
Em seguida, cada vez que você precisa para mostrar a caixa de diálogo você simplesmente se referem ao Singleton:
MyDialog.getInstance () showDialog ();.
Onde showDialog só faz a janela de diálogo visível.