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 :

[JPanel] suppression définitive d'un JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut [JPanel] suppression définitive d'un JPanel
    Bonsoir à tous,
    j'aimerais savoir s'il est possible de supprimer définitivement un JPanel et de le donner au ramasse-miettes, avec une méthode comme dispose() pour le JFrame;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    apercu.getJContentPane().remove(apercu.getFrance());
    apercu.setFrance(new FranceStatique(700,apercu.getPointsFrance(),apercu.getPointsFrance()));
    apercu.getJContentPane().add(apercu.getFrance());
    apercu.getFrance().hideScene();
    choixSecteur.affichageSecteur(apercu.getFrance());
    apercu.getListeTrajectoire().affichage(apercu.getFrance(), resultat);
    apercu.getFrance().showScene();
    Chaque fois que ce bout de code s'exécute, il rajoute une fentetre dans la barre des taches!!

    D'avance merci
    Bonne soirée
    F.

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    A priori, ton problème vient du fait que ce code enlève le JPanel de la fenêtre existante, mais ajoute le nouveau JPanel dans une nouvelle fenêtre.

    Donc soit :
    - tu mets le nouveau JPanel dans la fenêtre existante;
    - tu détruis la fenêtre existante et mets le JPanel dans une nouvelle fenêtre (pas top).

    Je joue un peu au devin, vu que le code que tu as donné ne contient aucune méthode de classes qu'on connaît. Mais bon, les noms sont assez explicites pour tenter le coup.

    [EDIT] Au fait, pour détruire le JPanel, il suffit de supprimer toutes les références dessus : l'enlever du Container parent, et faire monJPanel = null. Il deviendra tout de suite inaffichable, et le ramasse miettes le supprimera quand il le voudra bien.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Par défaut
    Merci pour la réponse, mais la facon dont j'ai codé m'empêche de faire mon JPanel=null;

    Je vais plutot faire la deuxième solution en utilisant dispose() pour effacer ma fenetre.

    Bon aprem

  4. #4
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Il n'est pas obligatoire - et même souvent nuisible - de mettre une référence à null pour que l'objet correspondant soit libérable par le ramasse-miette.

    Ce qu'il faut, c'est que l'instance ne soit plus accessible par le programme, c'est à dire qu'il ne soit plus possible, dans le programme, de la désigner.

    Par exemple, soit la méthode absurde suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void stupide()
    {
     Truc truc;
     
     truc = new Truc();
    }
    Ici j'ai créé un objet Truc, mais, sorti de la méthode, je ne pourrai plus l'utiliser : la variable truc étant locale, je n'aurai plus aucune référence dessus. Sous réserve que le constructeur de truc ne sauvegarde pas son instance quelque part (par exemple en propriété système), alors truc devient récupérable par le ramasse-miette, bien que je n'ai pas mis à null ses références.

    Cette technique qui consiste à rendre innaccessible un objet pour que la mémoire soit récupérée est la meilleure actuellement. Elle est plus efficace à tous niveaux que la mise à null.

    Par contre, ce qui est clair, c'est qu'il faut faire un dispose des fenêtres.

Discussions similaires

  1. [JPanel] Convertir un drawingArea ou JPanel en Image
    Par kanabitch dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 30/09/2009, 09h55
  2. Définition d'un JPanel coulissant expand/reduce
    Par Ne@tsoul dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 23/04/2009, 11h24
  3. [JPanel]ordre d'affichage JFrame JPanel
    Par cpr0 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 23/07/2007, 12h46
  4. Réponses: 3
    Dernier message: 20/03/2007, 10h32
  5. Réponses: 3
    Dernier message: 06/03/2006, 18h08

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