Accès à une classe interne

Résolu
Gian-Piero Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
Gian-Piero Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Dans une application, j'utilise une classe interne (SaveL) à l'intérieur d'une classe JFrame (CinFrame). Cela fonctionne très bien.

public class CinFrame extends JFrame implements Constantes {
...
private JMenuItem cinEnreg = new JMenuItem("Enregistrer");
...
// Cinème Enregistrer
cinEnreg.addActionListener(new SaveL());
...
// ----------------------------------------------------------------------
// CLASSES INTERNES -----------------------------------------------------
class SaveL implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
}
...
}


Au vu de mes maigres compétences, je voudrais savoir s'il est possible d'accéder à cette classe interne (SaveL) à partir de la classe Main ci-dessous. Dans l'affirmative, comment faire?

public class Main {
public static void main(String[] args) {
final CinFrame cf = new CinFrame();
SplashScreen splash = new SplashScreen(4000);
splash.showSplash();

cf.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
int choix1 = JOptionPane.showConfirmDialog(cf, "Vraiment quitter l'application?",
"Quitter l'application?", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);

if(choix1 == JOptionPane.YES_OPTION) {
int choix2 = JOptionPane.showConfirmDialog(cf, "Enregistrer le cinème?",
"Enregistrer?", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);

if(choix2 == JOptionPane.YES_OPTION) {
// Je voudrais accéder ici à la classe SaveL
}
System.exit(0);
}
}
});
}
}

Merci par avance de vos suggestions.
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Je penses que c'est une mauvaise idée d'avoir un WindowListener qui dépend d'un ActionListener, ça n'a pas trop de sens.

Je pense que tu devrais sortir tes Listeners pour qu'ils ne soient plus interne, il te faudrait alors un constructeur qui prends en paramètre le CinFrame que tu manipules, et c'est la classe CinFrame qui fournirait les méthodes permettant de la manipuler.

public TotoListener(CinFrame frame) {
    this.frame = frame;
}

public void actionPerformed(ActionEvent e) {
    frame.action();
}

cinEnreg.addActionListener(new TotoListener(this));

public TataListener(CinFrame frame) {
    this.frame = frame;
}

if(choix2 == JOptionPane.YES_OPTION) {
    frame.action();
}

cf.addWindowListener(new TataListener(this));
0
Gian-Piero Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Je te remercie de tes suggestions que je vais essayer de mettre en oeuvre.
0