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
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:
- Não estenda WindowListener. O correto é implementar.
- 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
}
}