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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top