Prezados amigos,
Sou novo tanto no fórum quanto na linguagem Java.
Após pesquisar por alguns dias não consegui uma resposta efetiva ao meu problema.
Tenho 3 classes.
A Classe frmInicio.java, é um form do tipo Main e após clicar num item do seu menu, ele abre outro form, adaptado à 1 JDialog cuja a propriedade setContentPane é alimentada pela classe frmEstudo.java que possui alguns componentes, entre eles o botão Fechar. Tanto o frmInicio.java e frmEstudo.java tem em suas referências a classe MyWindow.java, onde eu tenho métodos como void windowClosing, ou seja, quando o usuário clicar no X da janela (padrão windows para fechar um form qualquer) ele encerra ora com o System.exit(0) ora com o window.dispose().
Bom vamos ao problema: (Dado ao conhecimento super básico que tenho...)
1) Não consigo fazer um botão chamar o método windowClosing da classe estrangeira passando os argumentos necessários (WindowEvent e). Seria possível eu fazer isto?
2) Se "não" para a questão 1, eu criei um outro método nesta classe estrangeira do tipo void (public void btnFechar(Window window)) onde eu passo o "window" que quero fechar (neste caso frmEstudo). Acontece que para System.exit(0) funciona, só que acaba com toda a aplicação, e com o window.dispose() não acontece nada.
Alguém pode me ajudar?
Abaixo trechos do meu código... Classe frmInicio.java quando cria o form frmEstudo:this.newFileMenuItem.addActionListener(new ActionListener() { //ao clicar no menu...
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JDialog viewer = new JDialog(new javax.swing.JFrame(),"Visualização Modal", true); //cria uma JDialog chamada viewer
frmEstudo Estudo = new frmEstudo(); //instancia a classe frmEstudo.java passando para a variável Estudo
Estudo.setName("frmEstudo");
viewer.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
viewer.addWindowListener(new MyWindow(false)); //(OBS.: o valor 'false' alimenta o parâmetro construtor booFecha. Mais abaixo o significado)
viewer.setName("frmEstudo");
viewer.setContentPane(Estudo.getContentPane()); //atribui form ao JDialog
viewer.setSize(200, 160);
viewer.setLocationRelativeTo(Estudo);
viewer.setResizable(false);
viewer.setVisible(true); //exibe o form
}
});
this.jBtnFechar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
MyWindow form = new MyWindow(false); //instancia da classe estrangeira MyWindow (OBS.: o valor 'false' alimenta o parâmetro construtor booFecha. Mais abaixo o significado)
Window window = new Window(getOwner()); //a intenção é passar o objeto à classe estrangeira MyWindow
window.setName(getName());
form.btnFechar(window); //chama método estrangeiro btnFechar
}
});
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
Window window = ((Window)e.getSource());
int result = JOptionPane.showConfirmDialog(
window,
"Realmente fechar?",
"Fechar?",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION) {
if(booFecha){
System.exit(0);
}else{
window.dispose();
}
}
}
public void btnFechar(Window window){
int result = JOptionPane.showConfirmDialog(
window,
"Realmente fechar?",
"Fechar?",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION) {
if(booFecha){
System.exit(0);
}else{
window.dispose();//QUANDO booFecha É FALSO (O CASO EM QUESTÃO), ou seja, quando eu quero q apenas feche a janela, sem "matar" a aplicação. Infelizmente nada acontece.
}
}
}
Espero que tenha sabido expressar claramente o problema, e desde já, grato pela ajuda e felicidades à todos.
