Pergunta

Eu tenho um pequeno quadro onde peço usuário e senha. Este quadro será aberta clicando sobre um botão em uma janela principal.

Então eu tenho dois botões: OK e Cancelar

.

Quando clico no botão "cancelar", eu preciso fechar este quadro sem sair do aplicativo.

Como posso fazer isso?

Foi útil?

Solução

Você pode usar Frame.hide () ou Frame.dispose (). Eu recomendaria também a olhar para JDialog ou JOptionPane

Correção: hide () está obsoleto. SetVisible (false) deve ser usado em vez

Outras dicas

Talvez uma maneira mais limpa é apenas mudar o setDefaultCloseOperation de EXIT_ON_CLOSE para DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Você pode chamar setVisible (false) no quadro.

Você também pode querer chamar setDefaultCloseOperation na armação passando em HIDE_ON_CLOSE (informações aqui: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 ) . Isso vai impedir que o aplicativo de ir longe se eles utilizador atinge o "X" no JFrame para a fechar.

Use this.dispose(); no método ouvinte de ação quando o nome de usuário / senha bem-sucedido. por exemplo:

public void actionPerformed(ActionEvent ae) {

    if(ae.getSource()=="button you press to confirm username/password"){
        if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
            new "window to be opened upon success"
            this.dispose(); // calls dispose on this object ie. 
                                            // the login window 
        }
        else{
            userNameTf.setText("");
            passwordTf.setText("");

            JOptionPane.showMessageDialog(this,
                    "Username and/or password is incorrect!",
                    "Attention!",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

}

Se você estiver usando classes internas para lidar com os eventos basta substituir 'this.Dispose ()' com Super_Class_Name.this.dispose ();

Certifique-se de que você não:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

método setVisible não libera recursos de memória e deve ser usado somente quando o formulário é para ser usado novamente.

O Elimine método libera todos os recursos de tela nativas utilizadas por esta Janela, seus subcomponentes, e todos os seus filhos de propriedade. Ou seja, os recursos para esses componentes serão destruídos, qualquer memória que consomem será devolvido para o sistema operacional, e eles serão marcados como não exibíveis.

Faça uma função na classe externa onde estão implementando o JFrame (você precisa perto de pressionar o botão cancelar).
Escrever this.setVisible(false); na implementação dessa função.
Finalmente chamar esta função na implementação ActionListener quando você quer fechá-lo.

Você pode fazê-lo de muitas maneiras, mas estes dois caminhos são mais utilizável um
1. write this.setVisible(false) no interior implementado ActionListener
ou
2. write this.dispose() dentro implementado ActionListener . Espero que isso irá ajudá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top