Como travar uma tela até que a mensagem seja fechada?
3 respostas
pauloeduardo2906
Eu criei uma aplicação em que eu preciso exibir uma simples mensagem com apenas um botão ok e que ela seja fechado ao apertar esse botão, sendo que se eu clicar o botão que seria para exibir essa mensagem mais de uma vez, será criado mais de uma mensagem, eu queria travar a tela anterior até que seja clicado o botão pra fechar a mensagem!!!
Eu procurei no forúm algo que me ajudasse e achei que seria melhor usar o JDialog com o setModal!! Encontrei o seguinte exemplo:
frmCadastros frmc = new frmCadastros();
JDialog dia = new JDialog();
dia.setModal(true);
dia.setContentPane(frmc.getContentPane());
dia.setBounds(frmc.getBounds());
dia.setUndecorated(true);
dia.setVisible(true);
sendo que ao clicar no ok para fechar a mensagem ela não fecha, o dispose(); não funciona!!! Alguém sabe o que pode ser feito?
O JDialog deve ser chamado de dentro de um evento do frmCadastros.
Se for só para exibir uma mensagem com um botão OK, você pode usar JOptionPane.showMessageDialog() - fica mais fácil.
Se a sua janela de mensagem for mais complexa, uma forma de fazer é criar uma classe que estenda JDialog. Aí você precisa criar o botão OK e programar o evento para ele.
Abaixo um exemplo que cria as janelas de mensagem das duas formas:
importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;publicclassFramePrincipalextendsJFrame{publicFramePrincipal(){setLayout(newFlowLayout());JButtonbtAbrir=newJButton("Abrir Janela");btAbrir.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){abrirMensagem();}});add(btAbrir);JButtonbtMessage=newJButton("Mensagem");btMessage.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){JOptionPane.showMessageDialog(null,"Mensagem com showMessageDialog.");}});add(btMessage);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,300);}privatevoidabrirMensagem(){Mensagemms=newMensagem(this);ms.setVisible(true);}publicstaticvoidmain(String[]args){FramePrincipalfp=newFramePrincipal();fp.setVisible(true);}}
importjava.awt.FlowLayout;importjava.awt.Frame;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JLabel;publicclassMensagemextendsJDialog{publicMensagem(Frameowner){super(owner,"Titulo da Janela");setLayout(newFlowLayout());setModal(true);add(newJLabel("Coloque aqui a mensagem"));JButtonbtFechar=newJButton("OK");btFechar.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){fechar();}});add(btFechar);setSize(200,100);}privatevoidfechar(){dispose();}}
pauloeduardo2906
Valeu cara, usei exatamente o seu segundo exemplo e foi direitinho, eu tava fazendo parecido, mas eu deletava o argumento do super na tela de mensagem pq eu não sabia o que passar como parâmetro na hora de criar o objeto, mas aí eu criei um objeto de JFrame generico e funcionou!!!