Fermer une fentre en JAVA depuis un menu

Fermé
Vincent B - 22 déc. 2003 à 13:34
 Utilisateur anonyme - 23 déc. 2003 à 10:15
Bonjour à tous,

Bonnes Vacances pour ceux qui y sont, moi c'est seulement le 24 à midi. En attendant, j'essaie de trouver le bon code pour fermer une fenetre à partir d'un menu.

J'ai lu plusieurs codes, mais cela ne fonctionne pas. Puis-je utiliser addActionListener pour le rattacher au item correspondant ou dois-je utiliser WindowListener ? Le problème ensuite une fois la bonne méthode trouvée comment la liée au item ?

Merci d'avance pour vos suggestions,


Vincent B
A voir également:

4 réponses

silfaxu Messages postés 102 Date d'inscription jeudi 18 décembre 2003 Statut Contributeur Dernière intervention 6 février 2008 11
22 déc. 2003 à 16:01
Salut,

Tu peux, par exemple, utiliser un WindowListener. Par ex :
public MaFenetre extends JFrame inplements WindowListener {
... // attribut de la classe
public MaFenetre() { this.addWindowListener(this) ; } // constructeur par défaut
}

L'inconvénient de cette méthode est que tu dois absolument avoir les 7 méthodes que présente cette interface dans ta classe (ce qui peut rendre le code assez difficile à lire ..)
Quoiqu'il en soit, la méthode à modifier est la suivante :
public void windowClosing(WindowEvent e) {
this.dispose() ; // tu peux aussi utiliser this.hide() suivant ce que tu veux
}

Et enfin tu n'as plus qu'à appeler cette méthode depuis la méthode qui est liée à ton sousMenu :
public void actionPerformed(ActionEvent e) {
if ( e == monSousMenu ) { this.windowClosing(null) ; }

J'espere que ça t'aidera ...

sfx
0
Utilisateur anonyme
22 déc. 2003 à 19:15
Bonsoir,
pour la JFrame j'ajoute dans le constructeur:
this.addWindowListener(new WindowAdapter() {
public void windowClosing() {
System.exit(0);
}
});
Puis au niveau du menu par exemple:
quitter = new JMenuItem("Quitter");
quitter.setActionCommand("quitter");
quitter.addActionListener(this);
Il faut ensuite implementer la méthode actionPerformed:
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("quitter")) {
System.exit(0);
}
}
a+
0
Bonjour à tous,

Merci pour vos réponses. Sfx, j'ai essayé ta méthode mais je ne suis pas parvenu à avoir le bon résultat. Philtrain, je ne l'ai codé comme toi mais la solution que j'ai trouvé s'y rapproche :

je n'utilise pas setActionCommand("quitter"),
j'ai fait directement quitter.addActionListener( new ActionQuitter())

ActionQuitter est une classe encapsulée qui contient la méthode public void actionPerformed(ActionEvent e) dont le contenu est simplement System.exit(0).

J'ai fait tous les tests pour vérifier que ca marche, et je ne renconte plus aucun probleme.


Ainsi pour chaque élément de mon menu j'ai une classe encapsulée dédiée à un item contenant dans le constructeur l'action et ayant la méthode actionPerformed. De cette façon, j'ai réglé un autre probleme que j'avais au niveau de la structure du programme.


Encore Merci,


Vincent B
0
Utilisateur anonyme
23 déc. 2003 à 10:15
Bonjour Vincent,
La solution de la classe anonyme est en effet une bonne solution. Elle a pour principal avantage d'être compacte à écrire et personnellement je l'utilise pour les applications légères. Toutefois, elle n'est plus très adaptée lorsqu'il faut gérer des évènements complexes ou multiples.
La méthode de la classe écouteur que je proposais permet alors de clarifier le code.
a+
0