Como posso executar um método ( ex: salvarDados() ) quando fechar o JFrame?
Eu tenho uma tela de alteração de dados e la tem um botão SALVAR, mas quero que sempre que o usuário
fechar o JFrame ele pergunte se o usuário quer Salvar ou não, se sim ele executa o mesmo método do botão.
Tenho como objetivo nisso, fazer com que o usuário não feche a tela esquecendo assim de salvar os dados alterados.
use actionListener e faça a condição “se o painel for fechado” executa o que você quer.
public void actionPerformed(ActionEvent evt) {
JPanel panel = new JPanel();
panel.setLayout(null);
Object source;
source = evt.getSource();
//não tenho certeza se essa verificação é por "panel.close()"
if(source == panel.close()){
// //executa a função que você quer
}
Então, para fazer isso vc precisa implementar na sua classe o WindowListener, mas como quando vc implementa uma interface vc deve obrigatoriamente implementar os métodos da interface, existe uma classe adaptadora, a WindowAdapter. Nela, vc só implementa o método que vc quer, pois agora já não é mais uma interface e sim uma classe
Se vc extendeu JFrame na sua classe, faça assim:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
if (JOptionPane.showConfirmDialog(null,"Deseja sair")==JOptionPane.OK_OPTION){
salvarDados(); }
}
});
Não testei, mad me lembro um pouco, deve ser alguma coisa assim.
1 Então, eu não tenho um botão fechar, pois justamente a minha dúvida é quando ao fechar “x” la de cima da janela.
2 Eu não tenho nenhum Panel, é apenas um JFrame no qual tem um JTable no qual faço as alterações de cadastro.
E tenho um botão SALVAR. A minha idéia é justamente perguntar ao usuário se ele quer salvar quando clicar no “x” para fechar a janela
para que ele não feche e sem querer esqueça de salvar as alterações.
Porque daí, quando clicar no “x”, vai depender só da sua implementação do WindowClosing se vai fechar o JFrame ou não.
Ah, e depois do salvarDados();, mande um System.exit(0);, esqueci disso tbm.
Perfeito Thiago Luis
NOTA 10!
Era justamente isto que eu queria, mas ainda não estudei sobre Listener.
Não adicionei o System.exit(0); porque esta não é a tela principal.
Sei que não faz parte deste tópico, mas por acaso alguém saberia como fazer Quebra Automática de Linha nas linhas de uma coluna de uma JTable?
Então, para fazer isso vc precisa implementar na sua classe o WindowListener, mas como quando vc implementa uma interface vc deve obrigatoriamente implementar os métodos da interface, existe uma classe adaptadora, a WindowAdapter. Nela, vc só implementa o método que vc quer, pois agora já não é mais uma interface e sim uma classe
Se vc extendeu JFrame na sua classe, faça assim:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
if (JOptionPane.showConfirmDialog(null,"Deseja sair")==JOptionPane.OK_OPTION){
salvarDados(); }
}
});
Não testei, mad me lembro um pouco, deve ser alguma coisa assim.
Abraço[/quote]
vc sabe pq isso nao funciona dentro de um laço?
tipo… qnd eu fecho um jframe, eu dou a ação pra abrir outro
ao inves do salvaDados ae
funciona na primeira vez q passa no laço
na segunda nao
eu clico em fechar e nao acontece nada
alguem pode ajudar?
Então, este windowClosing() só esta implementado neste JFrame, que neste caso chama o método salvarDados().
No seu caso, você chama outro JFrame certo?
Ou seja, o que você precisa fazer é implementar no seu outro JFrame uma rotina igual a esta, mas com as condições que forem necessárias neste novo JFrame