1

J'ai une classe qui affiche un JFrame comportant un menu, dans lequel j'ai un item "Quitter".
Mon JFrame peut appeler d'autres JFrame et se lancer (dans l'absolu) un nombre infini de fois. Je peux donc créer plusieurs instances de mon JFrame à partir de n'importe quel autre JFrame.
Je veux pouvoir fermer le JFrame courant à partir de l'item "Quitter". Ca donne ça :
item = new JMenuItem("Quitter");
//item.setEnabled(false);
item.addActionListener(new ActionListener(){
.............public void actionPerformed(ActionEvent arg0) {
.............//ICI LE CODE DE FERMETURE
.............} }


Le problème est que le code à entrer pour fermer le JFrame courant doit être static, et que this.dispose() ne fonctionne donc pas.
Avez-vous des idées ? Merci d'avance !
/ JAVA / C / C++ / Cobol /

2

Tout d'abord, pour poster du code, sans perdre l'espacement, utilises les balises [pre ] plutôt que [cite ]

Pour ton code, tu ne peux pas fermer une fenêtre si tu n'as pas une référence a celle ci. Il faut que tu te débrouille pour y avoir accès dans ton listener. Avec un bout de code si court, difficile de trouver un moyen propre de faire ça.
Une manière de faire (mais certainement pas la plus propre)serait de stoker la références à ta JFrame dans une variable statique du genre:

class MyFrame extends JFrame{
   ... 
   static JFrame mainframe;
   ...
   public MyFrame(){
      mainframe = this;
   }
   ...
   public static void methodeStatique(){
      mainframe.dispose();
   }
}
avatar

3

Merci, je vais essayer ça.
/ JAVA / C / C++ / Cobol /