Domanda

Ho un piccolo fotogramma in cui chiedo utente e password. Questo telaio sarà aperto, facendo clic su un pulsante in una finestra principale.

Poi ho due pulsanti: OK e Annulla

.

Quando clicco sul pulsante "Annulla", ho bisogno di chiudere questa cornice senza uscire dall'applicazione.

Come posso fare questo?

È stato utile?

Soluzione

È possibile utilizzare uno Frame.hide () o Frame.dispose (). Io consiglio anche di guardare in JDialog o JOptionPane

Correzione: hide () è deprecato. SetVisible (false) dovrebbe essere usato al posto

Altri suggerimenti

Forse un modo più pulito è solo cambiare la setDefaultCloseOperation da EXIT_ON_CLOSE a DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

È possibile chiamare setVisible (false) sul telaio.

Si potrebbe anche voler chiamare setDefaultCloseOperation sul telaio passando HIDE_ON_CLOSE (info qui: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 ) . Che impedirà l'applicazione di andare via se utente preme il "X" sul JFrame per chiuderla.

Usa this.dispose(); nel metodo listener azione quando il nome utente / password riesce. ad esempio:

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 si utilizza le classi interne per gestire gli eventi basta sostituire 'this.Dispose ()' con Super_Class_Name.this.dispose ();

Assicurati di non:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

metodo setVisible non rilascia le risorse di memoria e deve essere utilizzato solo quando il modulo deve essere utilizzato di nuovo.

Il Smaltire metodo rilascia tutte le risorse nativa dello schermo utilizzate da questa finestra, le sue sottocomponenti, e tutti i suoi figli di proprietà. Cioè, le risorse per questi componenti verranno distrutti, qualsiasi memoria che consumano sarà restituito al sistema operativo, e saranno contrassegnati come non visualizzabili.

Fare una funzione nella classe esterna dove si sta implementando la JFrame (è necessario chiudere premendo pulsante Annulla).
Scrivere this.setVisible(false); nella realizzazione di tale funzione.
Infine chiamare questa funzione nella realizzazione ActionListener quando si desidera per chiuderla.

Si può fare in molti modi, ma queste due vie sono più usabile uno
1. scrittura this.setVisible(false) nella parte interna implementato ActionListener
o
2. scrittura this.dispose() all'interno implementato ActionListener . Spero che questo vi aiuterà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top