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

Langage Java Discussion :

Portée d'un composant


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut Portée d'un composant
    Bonjour,

    en étudiant l'excellent tutoriel de Baptiste WICHT sur le tableau avec JTable http://baptiste-wicht.developpez.com.../swing/jtable/, je constate que l'on ajoute des composants JPanel, contenant des JButton dynamiquement lors de l'exécution du constructeur de la classe fenêtre.

    La question que je me pose: ces composants n'ont que la durée de vie de la méthode dans laquelle il sont déclarés et instanciés. Alors comment se fait-il que l'on arrive tout de même à les gérer alors que le constructeur a fini son travail ?

    Si je me pose cette question, c'est parce que je suis en train de concevoir une fenêtre équipée d'un JPanel contenant des boutons, et une JTable dont les données évolues selon les ordres fournis par les boutons.
    Faut-il que je déclare les composants comme membres de ma classe principale afin qu'ils aient la portée et durée de vie de toute mon application, ou est-ce que je peux leur laisser la portée du constructeur ?

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Il ne faut pas confondre portée et durée de vie.

    La portée se limité peut-être au constructeur dans ce cas, mais tant qu'une référence existe vers tes composants, ils restent "en vie".

    Et donc ta question, si j'ai bien compris c'est :
    quand faut-il garder une référence explicite sur un composant "fils"?

    J'aurais envie de répondre : quand tu en as besoin.
    La plupart des composants n'ont pas besoins d'être conservés en référence car la plupart du temps, on leur affecte des listeners, models (ou autres) qui permettent de communiquer avec eux indirectement.

  3. #3
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Merci beaucoup,

    cette réponse est claire.
    Le truc c'est que comme on ne gère pas les réservations mémoire (on fait des 'new' et jamais des 'delete' comme en C++), je me demandais ce que devenais tous ces objets déclarés "furtivement" dans un constructeur de classe.

    Suite à votre réponse, je constate effectivement qu'il y a des 'Listeners' affectés à certains composants, et qui font le lien vers des méthodes de traitement d'évènement. (C'est subtil, je découvre )

    Merci et à bientôt.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 187
    Par défaut
    La JVM détermine (quand elle a envie) les objets qui ne sont plus référencés nul part et fait un delete pour toi. Le mécanisme est un peu compliqué... C'est ce qu'on appelle Garbage Collector.

    D'ailleurs le delete n'a pas d'équivalent en java, de plus, toute référence à un objet est toujours valide, ce qui fait que des erreur du style "memory access violation at 0x...." ne peuvent jamais survenir (sauf si on utilise des librairies natives mais c'est une autre histoire).

    Pour résumer, fait des new, et laisse java s'occuper du reste !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Par défaut
    J'ajouterai juste un petit détail en ce qui concerne les objets déclarés dans un constructeur.

    Quand tu construis un JPanel, si tu lui ajoutes un JButton dans le constructeur sans garder aucune référence vers ce JButton, une référence est créée lors de l'appel à add. En effet, un JPanel contient toujours une références vers tous les Component qu'il contient (enfin, c'est dans la classe Container que ça se passe, et JPanel hérite de cette dernière).

    D'ailleurs, on peut récupérer ces références avec la méthode getComponents, mais c'est pas toujours très pratique de récupérer le composant exact qu'on veut quand il y en a plusieurs...

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

Discussions similaires

  1. [Débutant] Entity Framework - Génération d'une table portée avec clé composée unique
    Par svt69 dans le forum Entity Framework
    Réponses: 1
    Dernier message: 23/05/2013, 23h23
  2. Composant pour port usb?
    Par Manu1985 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 19/12/2006, 14h41
  3. rafraichissement radiobutton du port com (composant de nono)
    Par chourmo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/02/2006, 14h52
  4. Scanner de ports / Composants SVP....
    Par Ren97 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 19/07/2005, 14h55
  5. Pb install composant TDLPortIO (piloter port //)
    Par blacknight dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/01/2004, 21h07

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