IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Variable d'instance et classe anonyme


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 103
    Points
    103
    Par défaut Variable d'instance et classe anonyme
    Bonjour,

    J'ai une classe A qui contient une methode qui a une classe anonyme. Je voudrais savoir si je pouvais accéder aux variables d'instance de la classe A dans ma classe anonyme.

    Merci
    A+

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Si je t'ai bien compris, oui tu peut y accéder, à la condition qu'aucune variable de la classe anonyme n'aie le même nom que la variable de la classe A que tu veut récupérer. Par contre tu ne pourras pas employer le this, puisque le this te renverra une référence vers la classe interne.

  3. #3
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    On peut utiliser this, il suffit d'écrire ClasseParente.this.
    Romain Guy
    Android - Mon livre - Mon blog

  4. #4
    Membre régulier Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 103
    Points
    103
    Par défaut
    Ok, ce code est donc correct alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class A {
        
        private ArrayList<Thumbnail> thumbnailList;
        
        private void createAndAddThumbnail(final File [] files) {
            SwingWorker sw = new SwingWorker() {
                protected Object doInBackground() throws Exception {
                    for(int i=0;i<files.length;i++) {
                        Thumbnail thumbnail = new Thumbnail(files[i]);
                        jPanel1.add(thumbnail);
                        thumbnailList.add(thumbnail);
                    }
                    return "";
                }
            };
            sw.execute();
        }
        
    }
    Et si je veux acceder à ma classe A dans la classe interne c'est :

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Ce code est incorrect du point de vue de la gestion des threads. La ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jPanel1.add(thumbnail);
    Devrait en fait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            jPanel1.add(thumbnail);
        }
    });
    Il ne faut pas manipuler les objets Swing depuis un thread qui n'est pas l'EDT. Le SwingWorker invoque doInBackground() justement dans un autre thread. Il faut soit faire ce que je viens d'écrire ou ajouter tous les élements dans le JPanel dans le done() du SwingWorker qui est invoquée dans l'EDT.

    Et puisque tu utilises Java 1.5 tu peux remplacer ta boucle par for (File thumbFile : files) et files[i] par thumbFile.
    Romain Guy
    Android - Mon livre - Mon blog

  6. #6
    Membre régulier Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 103
    Points
    103
    Par défaut
    Ok merci.
    Et est ce que le fait d'appelé un repaint dans le thread du SwingWorker est correct ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SwingWorker sw = new SwingWorker() {
                protected Object doInBackground() throws Exception {
                    for(Thumbnail thumbnail : thumbnailList) {
                        BufferedImage image = createThumbnail(thumbnail.getFile());
                        thumbnail.setImage(image);
                        jPanel1.repaint();
                    }
                    return "";
                }
            };

  7. #7
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oui (ainsi que revalidate() et les get/setText() + quelques autres).
    Romain Guy
    Android - Mon livre - Mon blog

  8. #8
    Membre régulier Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 103
    Points
    103
    Par défaut
    Ok. Merci pour ces précisions.

    A+

    PS : Félicitation pour la démo des JavaOne, c'est super jolie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variable d'instance et variable de classe
    Par glycerine dans le forum C++
    Réponses: 6
    Dernier message: 02/03/2015, 13h37
  2. Réponses: 27
    Dernier message: 03/01/2008, 11h07
  3. Variables de classe vs Variables d'instance
    Par webja dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 09h28
  4. [POO] Retrouver une variable d'instance de classe
    Par stailer dans le forum Langage
    Réponses: 1
    Dernier message: 18/02/2006, 10h56
  5. Réponses: 2
    Dernier message: 09/10/2005, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo