Accès à une classe interne

Résolu/Fermé
Gian-Piero Messages postés 5 Date d'inscription mercredi 11 mai 2016 Statut Membre Dernière intervention 21 mai 2016 - 19 mai 2016 à 14:07
Gian-Piero Messages postés 5 Date d'inscription mercredi 11 mai 2016 Statut Membre Dernière intervention 21 mai 2016 - 21 mai 2016 à 09:37
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.

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
19 mai 2016 à 14:34
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 mercredi 11 mai 2016 Statut Membre Dernière intervention 21 mai 2016
21 mai 2016 à 09:37
Je te remercie de tes suggestions que je vais essayer de mettre en oeuvre.
0