Dúvida simples sobre eventos:

3 respostas
marciofermino
Amigo tenho o seguinte código:
tela2 t = new tela2();
t.show();

// agora é que vem

            JOptionPane.showMessageDialog(null, "VOLTEI ......");
Eu precisava que ao clicar nesse botão ele fosse para a tela t ... e sim que eu fechasse a tela t.. ai sim me mostrava o option pane

Oque acontece é que assim que clico no botão ele abre a tela t e ja mostra o jOption...

Como eu poderia resolver?:

Não quero comparar mais no Delphi se fosse o mesmo caso .. ele iria abrir a tela t.. e quando eu saisse dela da t.. ( fechar a tela t ) ai ele mostraria o jOption..

Obriagado.

3 Respostas

danielbussade

Olá no java você pode fazer assim, implementando a interface WindowListener:

JFrame:

package janelas;


public class JFrame extends javax.swing.JFrame {
	private static final long serialVersionUID = 1L;
	private javax.swing.JMenu jMenu1;
	private javax.swing.JMenuBar jMenuBar1;
	private javax.swing.JMenuItem jMenuItem1;
    
  
    public JFrame() {
    	 super("Java");
         jMenuBar1 = new javax.swing.JMenuBar();
         jMenu1 = new javax.swing.JMenu();
         jMenuItem1 = new javax.swing.JMenuItem();
         jMenu1.add(jMenuItem1);
         jMenuBar1.add(jMenu1);
         setJMenuBar(jMenuBar1);
         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
         jMenu1.setText("Menu");
         jMenuItem1.setText("Item");
         this.setSize(100,80);
         jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
        
        public void actionPerformed(java.awt.event.ActionEvent evt) {
             	 Janela2 janela2= new Janela2();
             	 janela2.setVisible(true);
                 }
         });
        
    }
    
                          
}

Janela2:

package janelas;

import java.awt.Container;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Janela2 extends javax.swing.JFrame{
	private static final long serialVersionUID = 1L;
	private JLabel label;
	
	public Janela2() {
		label= new JLabel("Janela 2");
		Container container=this.getContentPane();
		container.add(label);
		this.setSize(150,80);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		addWindowListener(new WindowListener() {
			public void windowActivated(WindowEvent arg0) {		
			}

			public void windowClosed(WindowEvent arg0) {
				JOptionPane.showMessageDialog(null, "voltei");
			}

			public void windowClosing(WindowEvent arg0) {		
			}

			public void windowDeactivated(WindowEvent arg0) {
			}

			public void windowDeiconified(WindowEvent arg0) {
			}

			public void windowIconified(WindowEvent arg0) {
			}

			public void windowOpened(WindowEvent arg0) {	
			}	
		});
	}
	

}

Principal

package janelas;

public class Principal {
	public static void main(String[] args) {
		JFrame jFrame=new JFrame();
		jFrame.setVisible(true);
	}

}

Att

davidbuzatto

Isso acontece pois quanto vc chama o método show (use setVisible( true ) em virtude do mesmo não estar depreciado), ele mostra a janela e retorna direto ao método chamador, chamando por sua vez o diálogo do JOptionPane.

Sendo assim, utilize a solução do Daniel.

Você deve ter feito isso pensando que o show iria funcionar como o showMessageDialog, mas não é o caso, pois o método showMessageDialog só vai retornar ao método chamador quando alguma ação for tomada no diálogo.

Qual o propósito dessa janela que é mostrada após o fechamento?

Explique pq as vezes pode-se dar uma solução melhor.

Até mais!

marciofermino

eu entendi
mais me esclareca uma duvida esse metodo… vc colou no tela2… ou seja quando ele se fechar íesso mesmo ??

aquele exemplo de codigo. era so um exmplo mesmo
oque eu gostaria
era isso

fazer a tela2…ser chamada… e quando eu fechar a janela 2… que ele continua a ler o restando do bloco de codigo , tipo:

xxx
xxx
vai pra a tela2 (— ai eu vou la… quado eu fechar a janela 2.)

conitnue lendo meu codigo
xxxx
xxxx

Criado 10 de fevereiro de 2008
Ultima resposta 10 de fev. de 2008
Respostas 3
Participantes 3