2009-02-21 24 views
7

J'ai un petit cadre où je demande à l'utilisateur & mot de passe. Ce cadre sera ouvert en cliquant sur un bouton dans une fenêtre principale.java swing fermer la fenêtre sans quitter l'application

Ensuite, j'ai deux boutons: ok et annuler.

Lorsque je clique sur le bouton "annuler", je dois fermer ce cadre sans quitter l'application.

Comment puis-je faire cela?

Répondre

18

Vous pouvez utiliser Frame.hide() ou Frame.dispose(). Je recommanderais également de regarder dans JDialog ou JOptionPane

Correction: cacher() est obsolète. SetVisible (false) doit être utilisé à la place

+0

ok, et que se passe-t-il si mon gestionnaire de clics est dans une autre classe extarnal à la trame? – Giancarlo

+0

vous devez passer une référence à la trame pour le gestionnaire de clic (dans le constructeur) – TofuBeer

2

Assurez-vous de ne pas:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
+0

ce n'est pas mon problème mon pote :) – Giancarlo

1

Faire une fonction dans la classe externe où vous implémentez le JFrame (vous devez fermer le appuyant sur le bouton annuler).
Écrivez this.setVisible(false); dans l'implémentation de cette fonction.
Enfin, appelez cette fonction dans l'implémentation ActionListener lorsque vous souhaitez la fermer.

3

Peut-être un moyen plus propre est juste changer setDefaultCloseOperation de EXIT_ON_CLOSE à DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
3

Utilisation this.dispose(); dans l'action méthode d'écouteur lorsque le nom d'utilisateur/mot de passe réussit. par exemple:

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); 
     } 
    } 

} 

Si vous utilisez les classes internes pour gérer les événements il suffit de remplacer 'this.Dispose()' avec Super_Class_Name.this.dispose();

1

Vous pouvez le faire à bien des égards, mais ces deux façons sont les plus utilisés un
1. écriture this.setVisible(false) à l'intérieur mis en œuvre ActionListener
Ou
2. écriture this.dispose() intérieur mis en œuvre ActionListener. J'espère que cela vous aidera.

+0

C'est exactement ce que dit la réponse acceptée. Il n'y a aucune raison d'ajouter une réponse juste pour répéter ce qui est déjà accepté. –

2

La méthode setVisible ne libère pas de ressources mémoire et ne doit être utilisée que lorsque le formulaire doit être réutilisé.

dispose méthode Libère toutes les ressources d'écran natives utilisées par cette fenêtre, ses sous-composants et tous ses fils.Autrement dit, les ressources de ces composants seront détruites, toute mémoire qu'ils consomment sera renvoyée au système d'exploitation, et ils seront marqués comme indisponibles.