Janela Principal espera dado de um JDialog [RESOLVIDO!]

6 respostas
S

Gente, bom dia!

Tenho uma janela principal que chama um jdialog e TEM QUE ESPERAR esse dado!

alguém pode me dar uma dica sobre como parar a execução do código da principal até q esse dado do dialog chegue?

aguardando e grato!

6 Respostas

S

consegui resolver assim: (pra quem estiver passando pelo mesmo sufoco que eu passei…, compartilhar nunca é demais!)

a classe JOPtionpane bloqueia a aplicação até que o dado seja recebido…

fiz com que meu jDialog recebesse o meu JOptionPane contendo o jPanel geral (que contem tudo que eu quero adicionado a ele)!

JOptionPane pane = new JOptionPane(panelGeral); dialog = pane.createDialog(null, "Informe os dados solicitados:");
yessssssssssssssssssss!
:smiley: :smiley: :smiley: :smiley:

V

Todo JDialog tem a propriedade setModal. Se definir para true, o usuário não poderá sair do seu JDialog e navegar para outra janela até que fecha a janela. Outra característica é que, graças a isso, o método setVisible do JDialog também trava e espera até que a janela seja fechada, igual o JOptionPane faz. :wink:

Resolvi comentar aqui pois nem sempre o JOptionPane é suficiente para as necessidades de uma aplicação de verdade.

S

ViniGodoy,

perfeito cara… agora eu tinha testado este setModal, só que o jdialog tinha uma tabela com botões de consultar. Resultado, não sei por que, parece que o setModal travava o actionPerformed do botão… eu clicava e não resolvia nada…
agora eu não sabia que o setVisible impedia também!

vou testar…

J

Veja se podem me ajudar a achar o problema, eu apliquei o setModel true no meu JDialog, mas a tela principal não está aguardando o retorno da minha JDialog. Abaixo onde eu chamo minha JDialog no JFrame principal e o codigo da JDialog.

if (o.equals(itemCadastroCardapio)) {
		new JDialogView(new CadastroCardapioView(operador,1));
}
public JDialogView( JPanel painel) {

		// adjust size and set layout
		painel.setPreferredSize(painel.getPreferredSize());
		painel.setLayout(null);

		// set component bounds (only needed by Absolute Positioning)
		this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		this.getContentPane().add(painel);
		this.pack();
		this.setLocationRelativeTo(null);
		this.setIconImage(getToolkit().getImage("img/ico_logo.png"));
		this.setResizable(false);
		this.setVisible(true);
		this.setModal(true);
		this.setModalityType(DEFAULT_MODALITY_TYPE);
		
	}
	
	public void sair(){
		this.dispose();
	}
S

Eu criei o JDialog usando assim:

JDialog dialog = null;

e uso diretamente sem criar uma classe específica para ela:

dialog = null;
        if ((dialog == null) || (!(dialog.isVisible()))) {
            dialog = new JDialog();
            dialog.setTitle("Renove agora sua Licença!");
            dialog.add(painel);
            // dialog.getContentPane().add(painelGeral);
            dialog.setPreferredSize(new Dimension(800, 350));
            dialog.pack();
            dialog.setModal(true);
            dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        }

        //Centralizando a dialog no centro da tela
        java.awt.Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        dialog.setLocation((int) (d.getWidth() - dialog.getWidth()) / 2, (int) (d.getHeight() - dialog.getHeight()) / 2);

        dialog.setVisible(true);

ou seja… eu faço a tela surgir diretamente de dentro de onde eu chamo.
Se for aparecer ao clicar em um botão por exemplo eu defino a variável lá no inicio e coloco ela setando null e criando-a dentro do actionperformed do botão.

S

Experimente como te disse ai em cima, criar a tela do JDialog de dentro do próprio JFrame.

Criado 1 de julho de 2011
Ultima resposta 21 de set. de 2014
Respostas 6
Participantes 3