Botão cancelar que fecha a janela

Java

09/04/2009

A classe abaixo extende de JFrame e desejo fechar a janela quando o botão cancelar for clicado. Para isso pensei em adicionar no evento action comand deste botão a seguinte linha: this.dispose(); O problema é que a referência this se refere ao tipo aciton listener se for usada dentro do evento. Isso daria certo se o this fizesse referência à classe CadastroUsuarios Como resolvo isso? Como faço a janela fechar (só fechar a janela!)quando o botão cancelar for pressionado?[/code] private JButton getJButtonCancelar() { if (jButtonCancelar == null) { jButtonCancelar = new JButton(); jButtonCancelar.setBounds(new Rectangle(443, 162, 95, 25)); jButtonCancelar.setText("Cancelar"); jButtonCancelar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("Dar um jeito d fechar a janela");; // Dar um jeito de fechar a janela } } ); }
Gabriel Lago

Gabriel Lago

Curtidas 0

Respostas

Vitor Pamplona

Vitor Pamplona

09/04/2009

faça assim: ClasseDaJanela.this.setVisible(false);
GOSTEI 0
Terra Jr.

Terra Jr.

09/04/2009

[quote="vfpamp"]faça assim: ClasseDaJanela.this.setVisible(false);
No caso a janela ficará invisível, mas não será fechada.! Ok?!
GOSTEI 0
Glaucio Melo

Glaucio Melo

09/04/2009

[quote="terra.jr"][quote="vfpamp"]faça assim: ClasseDaJanela.this.setVisible(false);
No caso a janela ficará invisível, mas não será fechada.! Ok?!
Isso mesmo :)
GOSTEI 0
Daniel Martins

Daniel Martins

09/04/2009

Não entendi bem sua pergunta, mas pelo que consegui entender, você não está conseguindo acessar o 'this' do formulário para chamar o dispose(), é isso? Se for, dentro do seu método actionPerformed(), utilize o seguinte código para fechar a janela:
public class Formulario extends JFrame {
    private JButton fecharButton;

    ...

    fecharButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
           Formulario.this.dispose(); // Referência this do formulário
        }
    });
}
[]'s
GOSTEI 0
Marcelo Martins

Marcelo Martins

09/04/2009

Caso vc não esteja levando fé no setVisible() então faça o seguinte: JButton fechar = new JButton("Fechar"); fechar.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ ((JButton) e.getSource).getTopLevelAncestor().hide(); } }); Este com certeza fechara apenas a janela. Espero que resolva seu problema Ate mais... FUI
GOSTEI 0
Filipe Andrade

Filipe Andrade

09/04/2009

esqueça o this. coloque apenas dispose() e com ctz irá fechar!
GOSTEI 0
Romeryto Lira

Romeryto Lira

09/04/2009

[quote="fcsacin"]esqueça o this. coloque apenas dispose() e com ctz irá fechar!
Eu tenho uma Janela principal e no menu instancio(clico pra abrir) uma mova Janela de Cliente. Aí depois eu pra fechar num botão eu coloco no evento onclick dele o this.setVisible(false). Mas essa janela continuará existindo na memória. Quando eu for no formulário principal dinovo e mandar abrir o formulário de clientes ele tem o código de instanciar a janela de Cliente. Aí eu fecho a de cliente. Então vão ficar várias janelas de clientes alocadas na memória? O dispose() realmente fecha a janela? Mata a janela realmente. Pois vi que o que com o setVisible(false) o programa ficava rodando ainda na memória e muito lento. Se puderem me ajudar agradeço.
GOSTEI 0
Romeryto Lira

Romeryto Lira

09/04/2009

Usei o this.dispose() pra fechar o formulário mas parece que ainda ele fica rodando na memória, assim o programa fica lento. Vai em anexo o screenshot da minha tela e podem ver na parte de baixo do netBeans que o programa ainda continua rodando na memória. Acho que o certo era quando se fechasse o jFrame ele liberasse a memória.
GOSTEI 0
Romeryto Lira

Romeryto Lira

09/04/2009

[quote="romeryto"]Usei o this.dispose() pra fechar o formulário mas parece que ainda ele fica rodando na memória, assim o programa fica lento. Vai em anexo o screenshot da minha tela e podem ver na parte de baixo do netBeans que o programa ainda continua rodando na memória. Acho que o certo era quando se fechasse o jFrame ele liberasse a memória.
Queria saber a maneira mais indicada pra fechar a janela tendo como base a eficiência do programa. O dispose() é o ideal?
GOSTEI 0
Jacques Santos

Jacques Santos

09/04/2009

Estou com uma dúvida semelhante.Como eu faço para fechar uma janela sem fechar a aplicação toda e sem utilizar botão mas sim o usuário clicar no "X" da janela? Estou fazendo uma tela de ajuda onde não haverá botões.
GOSTEI 0
Jacques Santos

Jacques Santos

09/04/2009

Acabei de descobrir, no NetBeans é só modificar a propriedade defaultCloseOperation para DISPOSE ou se preferir HIDE.
GOSTEI 0
Diogo Rodrigues

Diogo Rodrigues

09/04/2009

estou usando o
setVisible(false);
dispose();
Ele fecha a janela, até aí tudo blz. Mas continua executando. Como no exemplo abaixo.
try{
...
if (diferenca < 10000) {
                       JOptionPane.showMessageDialog(null,"Erro: O cliente não possui o tempo mínimo de conta no banco!");
                       setVisible(false);
                       dispose();
          }
...
Ele não para por aí. Continua as instruções e insere no banco.
try { Statement st=cnn.createStatement();
            String sql="INSERT INTO emprestimo (Tipo_emprestimo_idTipo_emprestimo...)...
            if (st.executeUpdate(sql)==1)
                JOptionPane.showMessageDialog(null,"Produto Inserido com sucesso");
            else{
                JOptionPane.showMessageDialog(null,"Erro na Inclusão");
            }
st.close();
        } catch (Exception erro){
            JOptionPane.showMessageDialog(null,"Erro: " + erro.getMessage());
        }
Tem nem uma semana que comecei a estudar java e até agora todas as dúvidas que tive encontrei aqui.
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

não tem muito a ver com esse tópico.... Voce fechou a janela, mas isso não fecha a aplicação (como faria uma aplicação sem GUI?) Se VOCE programou algo para rodar, o computador vai (tentar) rodar isso. Se não tiver nada rodando (outra Thread) e fechar a janela, a máquina virtual (JVM) vai ser terminada e pronto, mas se tiver algum Thread (não daemon) rodando ela continuará viva. Solução (brutal): chame o System.exit(0) que fecha a JVM! []]
GOSTEI 0
Diogo Rodrigues

Diogo Rodrigues

09/04/2009

É que em C seria tão fácil, só daria um break e pararia a estrutura. Qual a solução em java? Só isso que eu queria saber.
GOSTEI 0
Carlos Heuberger

Carlos Heuberger

09/04/2009

[quote="xploitx"]É que em C seria tão fácil, só daria um break e pararia a estrutura. Qual a solução em java? Só isso que eu queria saber.
??? pararia a estrutura ??? o que que é isso ??? que me lembro em C não é tão diferente assim, se fechar uma janela, o resto do programa continua rodando... mas já faz muito tempo que não fiz nada em C... Como faz em Java: [quote="simu escreveu na mensagem anterior!!!"]... Solução (brutal): chame o [b]System.exit(0)[/b] que fecha a JVM! ...
[]
GOSTEI 0
Thiago Lima

Thiago Lima

09/04/2009

 this.dispose() 
este comando mata a janela e todos os seus filhos, não apenas fica invisivel, caso voce esteja chamando para o frame irá matar todas as operaçoes daquele frame segundo a api do java http://java.sun.com/javase/6/docs/api/ public void dispose() Releases all of the native screen resources used by this Window, its subcomponents, and all of its owned children. That is, the resources for these Components will be destroyed, any memory they consume will be returned to the OS, and they will be marked as undisplayable. The Window and its subcomponents can be made displayable again by rebuilding the native resources with a subsequent call to pack or show. The states of the recreated Window and its subcomponents will be identical to the states of these objects at the point where the Window was disposed (not accounting for additional modifications between those actions). Note: When the last displayable window within the Java virtual machine (VM) is disposed of, the VM may terminate. See AWT Threading Issues for more information. See Also: Component.isDisplayable(), pack(), show() [url][/url][url]
GOSTEI 0
Thiago Lima

Thiago Lima

09/04/2009

uma pergunta, sei que não tem nada a ver com o tópico. Como aumenta a foto do perfil???
GOSTEI 0
POSTAR