Ajuda com WindowListener

Boas, eu tenho um problema e gostava que alguém me ajudasse:
Eu tenho um programa com várias janelas, para este caso específico o que acontece é o seguinte: o utilizador está numa janela, vamos chamar lhe janela A, abre outra janela, vamos chamar lhe janela B, para ir registar uma coisa que é precisa na janela A, o que eu quero é executar uma função específica, na janela A, quando a janela B for fechada.
Para verificar se a janela B está fechada penso usar o método isVisible();
O que eu não sei é onde meter esse isVisible();
Alguém me pode ajudar?

Cumps

Use um windowListener na janela B.
http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html

Obs: Seja específico nos títulos dos tópicos ao criá-los.

Obrigado, vou agora tentar perceber esse código.
Sobre o título eu não sabia que título lhe dar, peço desculpa

Boas, eu estive a ver se percebia o código acima mencionado e não consigo pô lo a funcionar.

Eu criei uma classe JanelaEspia onde extendi a clase WindowAdapter: e criei uma função windowClosed

[code]public class JanelaEspia extends WindowAdapter{

@Override
public void windowClosed(WindowEvent e){
    
    FolhaReparações janela = new FolhaReparações();
    janela.carregarComboModelo("nulo", 1);
    janela.carregarCombonrserie("nulo", 1);
    
    System.out.println("As combos foram carregadas");
}

}[/code]

chamei essa função na janela B que é FormEquipamento, no main:

[code]public static void main(String args[]) {
/* Set the Nimbus look and feel /
//
/
If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if (“Nimbus”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(FormEquipamento.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FormEquipamento.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FormEquipamento.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FormEquipamento.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new FormEquipamento().setVisible(true);
            new FormEquipamento().addWindowListener(new JanelaEspia());
            
        }
    });
}[/code]

e eu tenho a janela A, que é a FolhaReparações aberta mas as combos não são atualizadas. Porque é que isso acontece?

Agradecia se alguém me puder ajudar.

Tenta com windowClosing().

Na API do WindowListener (http://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html) diz que windowClosed é chamado quando é chamado o método dispose() sobre a janela e windowClosing é chamado quando a janela é fechada pelo menu do sistema (_ [] X).

Também tentei com o windowClosing e não dá na mesma :frowning:
Desta maneira não sei como fazer mas “contornei” o problema:
como o que eu queria era carregar uma comboBox, eu simplesmente a carrego em FocusGained().
Sei que não é a maneira ideal mas resolveu.
Devo por resolvido no título do tópico? o problema foi resolvido mas não foi com o WindowListener…
Cumps

Eu estava meio desatento hoje de manhã. Percebi agora dois erros no seu código:

  1. Não estenda WindowListener. O correto é implementar.
  2. Você está criando duas instâncias de FormEquipamento e somente a segunda está recebendo o listener.

Corrija e tente novamente, tenho certeza que funcionará agora.

A minha classe JanelaEspia é só uma classe, não é um JFrame, por isso eu não posso implementar, quando o faço ele dá erro e a solução desse erro é criar uma subclasse…

É mesmo, windowAdapter não é interface.
Pode ser feito também com classe anônima.

jframe.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ //Ações } }