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

API standards et tierces Java Discussion :

Trouver programmatiquement l'instance d'un objet parent dont je suis une propri�t�


Sujet :

API standards et tierces Java

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    263
    D�tails du profil
    Informations personnelles :
    �ge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 263
    Par d�faut Trouver programmatiquement l'instance d'un objet parent dont je suis une propri�t�
    Bonjour.
    J'ai une question portant sur Java; pas sur Swing, m�me si mon exemple en comporte des �l�ments de Swing.

    Help ! Quelqu'un pourrait d'abord me dire : � part les tags [LIST] et [INDENT] pour �tablir une 'liste � bulles' avec diff�rentes indentations, quel est le tag d�signant qu'on passe � l'item suivant dans une liste ? Je corrigerai alors les deux listes suivantes.

    � partir d'un objet 'b' (this), trouver par instructions la variable ou l'objet 'a' pour lequel 'a' constitue une propri�t� dans 'b' (= une variable d'instance).
    (Non pas : Trouver � partir de l'objet 'b' (this) l'objet 'a' dont il h�rite [super])

    Soit la configuration (�lagu�e) suivante :
    • Un panneau 'panneau�Onglets2' de classe 'JTabbedPane' agr�geant [addPan()]
      • deux panneaux 'tab_�nerg�lectr_TranchePuiss_2x'
        de classe propre '�nerg�lectrParTranchePuiss'
        devant pouvoir fonctionner de mani�re autonome et comprenant chacun :
        • un panneau 'panneauTteLaPage' de classe 'JPanel' agr�geant entre autres
          • un panneau 'panneauDePanneaux�UnOnglet'
            agr�geant trois panneaux, dont les deux suivants concernent le pr�sent probl�me :
            • 'tabPan_ChoixMach' de classe propre 'TabPan_ChoixMach'
              contenant la m�thode 'public byte getNbreMachChoisies()' qui int�resse d'autres objets dans d'autres branches.
            • 'tabPan_TtesCombMach' de classe propre 'TabPan_TtesCombMach'
              h�ritant de JPanel et contenant entre autres :
              • 'tablePrinc_TtesCombMach' de classe 'TablePrinc_TtesCombMach'
                h�ritant de JTable et faisant appel � 'Mod�leTblPrinc_TtesCombMach'.

          • un panneau � graphique ('panneauGraph' - Ne concerne pas le pr�sent probl�me)


    un panneau � graphique ('panneauGraph' - Ne concerne pas le pr�sent probl�me)
    Rem. Pour la simplicit�, je n'ai pas mentionn� les 'JScrollPane's.

    [Je n'ai pas trouv� le moyen pour que l'�diteur affiche une bulle noire �galement au 2e item et plus ! Good grief]

    Pour permettre � des m�thodes propres � la 'tablePrinc_TtesCombMach' d'acc�der au 'nbreMachChoisies' de l'objet 'tabPan_ChoixMach',
    • soit je passe l'un des deux objets '�nerg�lectr_TranchePuiss' de la classe m�me '�nerg�lectr_TranchePuiss' en argument
      (M�thode que j'emploie couramment) :
      • au constructeur 'TabPan_TtesCombMach(�nerg�lectrParTranchePuiss �n�lecTranPuiss)'

      • � 'mod�leTblPrinc_TtesCombMach = new Mod�leTblPrinc_TtesCombMach(�n�lecTranPuiss)'

      • ...
    • soit '(choixpuissmachcog�n.monotone.machchoisies.Mod�leTable_MachChoisies) �n�lecTranPuiss.getTabPnl_MachChoisies().getTable_MachChoisies().getModel()' .

    • soit j'utilise un import de '�n�lecTranPuiss'. (M�thode que j'emploie couramment)

    Voici enfin ma question :
    Plut�t que de transmettre '�n�lecTranPuiss' par argument d'objet � objet (= ma m�thode privil�gi�e n�2), y a- t-il des instructions de l'API de Java qui permettent de trouver l'objet parent de l'objet o� l'on est, pour faire par une suite d'instructions le cheminement vers une variable (retourn�e par la m�thode 'public getNbreMachChoisies()'), vers un objet cousin ('tabPan_ChoixMach') et la transmettre aux codes situ�s dans les objets 'TablePrinc_TtesCombMach' et 'Mod�leTblPrinc_TtesCombMach' ?
    Un peu comme 'super.', sauf qu'il ne s'agit pas ici d'h�ritage. Ou comme 'InstanceOf()'.
    Mon expos� est assez clair ?

    Merci d'avance pour vos �ventuels essais de r�ponse
    et � D�veloppez.net pour son impressionnante offre et son pr�cieux service.

  2. #2
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Salut,

    Pour te r�pondre sur l'aspect "�dition/r�daction", avec les listes, tu n'as pas besoin de te pr�occuper des indentations.


    [LIST]
    [*]niveau 1
    [*]niveau 1
    [*]niveau 1

    [LIST]
    [*]niveau 2
    [*]niveau 2

    [LIST]
    [*]niveau 3
    [*]niveau 3
    [*]niveau 3
    [/LIST]

    [*]niveau 2
    [/LIST]

    [*]niveau 1
    [*]niveau 1
    [*]niveau 1
    [/LIST]



    Affiche :
    • niveau 1
    • niveau 1
    • niveau 1
      • niveau 2
      • niveau 2
        • niveau 3
        • niveau 3
        • niveau 3
      • niveau 2
    • niveau 1
    • niveau 1
    • niveau 1


    En revanche, pour les puces, on est limit� aux ronds noirs, aux listes de nombres, lettres (romaines minuscules/majuscules) et chiffres romains :

    [LIST]
    [*]niveau 1
    [*]niveau 1
    [*]niveau 1

    [LIST=i]
    [*]niveau 2
    [*]niveau 2

    [LIST=A]
    [*]niveau 3
    [*]niveau 3
    [*]niveau 3
    [/LIST]

    [*]niveau 2
    [/LIST]

    [*]niveau 1
    [*]niveau 1
    [*]niveau 1
    [/LIST]



    • niveau 1
    • niveau 1
    • niveau 1
      1. niveau 2
      2. niveau 2
        1. niveau 3
        2. niveau 3
        3. niveau 3
      3. niveau 2
    • niveau 1
    • niveau 1
    • niveau 1


    Pour des puces graphiques, reste l'indentation, mais c'est bien se faire c... compliquer la vie, alors que les listes imbriqu�es me semblent suffisamment lisibles AMHA.

    Par ailleurs, pour info, la doc des balises est ici.
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  3. #3
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    En ce qui concerne tes questions techniques, c'est moins clair.

    1. J'ai l'impression que tu cherches � faire de la r�flexion, mais est-ce pour faire un exercice sur la r�flexion (ou introspection), ou pour faire de la programmation standard ?
      Parce que normalement, les objets n'ont pas � analyser les variables des autres objets, ou chercher leurs propre variables (ils y ont acc�s de par l'impl�mentation du langage), ou encore le parent (encore faut-il d�finir ce que �a pourrait bien �tre (je suppose ici que ce serait une instance d'objet qui pourrait avoir une r�f�rence vers l'objet dont on chercherait le parent, mais direct (par variable membre du type de l'objet), indirecte (par variables de composition, genre tableau, liste, map, ou autre s�ries d'objets encapsul�s les uns dans les autres... et autre type de lien), surtout qu'une m�me instance d'objet peut �tre r�f�renc�e par plusieurs objets, voire par lui-m�me, voire par aucun et encore exister en m�moire...).
      Je dis normalement parce que le principe m�me de base de l'objet est que ses variables ne devraient jamais �tre acc�d�es que par lui-m�me (encapsulation/boite noire).
    2. La r�flexion permet dans une certaine mesure d'aller chercher les variables d'une classe, et d'�valuer pour une instance, les valeurs ou r�f�rences qui y sont stock�es, mais on l'utilise dans des cas tr�s sp�cifiques (� moins que l'exercice porte sur la r�flexion).
    3. il n'est pas totalement impossible de trouver les objets qui r�f�rencent un objet donn�, mais c'est plut�t compliqu�, pour un int�r�t limit� dans le cas d'un runtime (en debug, profiling (ou usage de mbean pour scruter des datas de runtime), ou ce genre de choses, je dis pas, c'est utile... ).
      Apr�s si le besoin est au niveau du runtime, c'est par la mod�lisation de la classe qu'un objet pourra conna�tre un parent par exemple, comme c'est le cas d'une classe de mod�lisation d'arbre (exemple Java javax.swing.tree.TreeNode et sa m�thode getParent()).
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    263
    D�tails du profil
    Informations personnelles :
    �ge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 263
    Par d�faut
    Bonjour Jo�l.
    Merci pour ta double r�ponse. Surtout celle sur la 'r�flexion' ouvre mon horizon.
    Concernant
    � partir d'un objet 'b' (this), trouver par instructions la variable ou l'objet parent 'a' pour lequel 'b' constitue une propri�t� (= une variable d'instance).
    C'�tait pour moi un �clair de solution alternative, cherchant � �viter
    � soit de multiplier les imports d'autres classes, celle contenant 'getNbreCol()' (pour trouver le 'nbreCol'),
    � soit les longues d�signation de cheminement pr�c�dant un 'getNbreCol()'
    situ�e dans une classe d'une autre branche de la bonne instanciation de 'tab_�nerg�lectr_TranchePuiss_2x'.
    Mais 'getParent()' n'existe que rarement dans les API et conduirait aussi � un long cheminement -> Je dois oublier.
    Sempiternel, mon remerciement, � toi et � D�veloppez.net.

    P.S.: Pour laisser � qui que ce soit un temps d'intervention, je n'actionnerai 'R�solu' que dans trois jours.

  5. #5
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par Chavadam Voir le message
    Merci pour ta double r�ponse. Surtout celle sur la 'r�flexion' ouvre mon horizon.
    La r�flexion n'est pas la solution la plus optimis�e en terme de temps de r�ponse. L'acc�s direct aux variables

    Concernant C'�tait pour moi un �clair de solution alternative, cherchant � �viter
    Citation Envoy� par Chavadam Voir le message
    soit de multiplier les imports d'autres classes, celle contenant 'getNbreCol()' (pour trouver le 'nbreCol'),
    La multiplication des imports n'a pas d'importance sur l'ex�cution, en revanche la r�fl�xion, si tant est qu'on pourrait l'utiliser pour faire ce que tu veux en a une.

    Si une classe a besoin d'une information, c'est normal qu'elle y est acc�s, par la classe qui la d�finit, dont avec l'import correspondant qui est n�cessaire le cas �ch�ant.

    Citation Envoy� par Chavadam Voir le message
    soit les longues d�signation de cheminement pr�c�dant un 'getNbreCol()'
    C'est en g�n�ral, effectivement, � �viter. Si une classe a besoin d'une information, elle doit y avoir directement acc�s de pr�f�rence.

    Citation Envoy� par Chavadam Voir le message
    situ�e dans une classe d'une autre branche de la bonne instanciation de 'tab_�nerg�lectr_TranchePuiss_2x'.
    Je comprends pas trop ce que tu entends par "branche d'instanciation" ?

    Citation Envoy� par Chavadam Voir le message
    'getParent()' n'existe que rarement dans les API et conduirait aussi � un long cheminement -> Je dois oublier.
    De quelle API parles-tu ? Si dans une classe, tu as besoin d'une m�thode getToto(), tu l'ajoutes � la classe.

    Genre
    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
    public class Exemple {
       private final Exemple parent;
       public Exemple() {
           this.parent=null;
       }
       public Exemple(Exemple parent) {
           this.parent=parent;
       }
       public final Exemple getParent() { 
             return parent;
       }
       public final Exemple getRacine() { 
          Exemple racine=this;
          while(racine.parent!=null) racine = racine.parent;
          return racine;
       }
    }
    Si l'information ne doit pas n�cessairement d�pendre d'une hi�rarchie, on peut aussi la fournir directement, ou indirectement (fournir une instance qui a l'information), au constructeur, par setter, injection, d�corateur, etc. En particulier si tu as une fabrique qui va affecter cette information.

    Apr�s, si tu as beaucoup de classes, et que tu veux pouvoir avoir syst�matiquement certaines m�thodes, variables, etc :
    • par le mod�le, par abstraction, interface... (c'est ce que fait Swing, par exemple (javax.swing.JComponent), pour la m�thode getParent() justement qui doit exister dans tous les composants)
    • par annotation (utilis�e entre autre pour l'injection par exemple), qui te permettra d'ajouter syst�matiquement des parties de code, en �crivant un minimum de code
    • ou �ventuellement par aspect (peut-�tre un peu trop overkill pour ton cas)
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    263
    D�tails du profil
    Informations personnelles :
    �ge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 263
    Par d�faut
    Salut Jo�l.

    Ton importante parenth�se :
    (c'est ce que fait Swing, par exemple (javax.swing.JComponent), pour la m�thode getParent() justement qui doit exister dans tous les composant)
    � Soit que mon application Swing comporte de nombreuses JFrames, JPane, JPanel, JScrollPane, JTabbedPane suivant une arborescence s�parant bien toutes les tables (table_MachChoisies, tablePrinc_TtesCombMach, ...), telle que la description dans ma premi�re intervention n'en montre qu'une partie.
    � Soit que le panneau commun o� se s�parent les codages propres aux panneaux de deux tables est 'tab_�nerg�lectr_TranchePuiss_2x' (de classe propre '�nerg�lectrParTranchePuiss' - voir premi�re intervention - pas forc�ment jusqu'au tronc de l'arborescence)
    � Soit que j'ai besoin dans une branche (tabPan_TtesCombMach) de trouver entre autres le 'nbreRang�es' ('getRowCount()) de la 'table_MachChoisies' pour pouvoir �laborer dynamiquement la structure de ma 'tablePrinc_TtesCombMach' dans une autre branche,
    alors, je pourrais, dans la branche du panneau 'tabPan_TtesCombMach' "remonter" � l'aide de plusieurs 'getparent()' jusqu'au panneau 'tab_�nerg�lectr_TranchePuiss_2x', et de l� "redescendre" vers le panneau ('.' pour atteindre une propri�t� ou une m�thode) vers le panneau 'table_MachChoisies' pour y p�cher classiquement 'getNbreRang�es().
    C'�tait cela, mon inspiration-�clair ... que je testerai quand j'aurai un peu plus de temps pour "jouer".

    Ma question �tait donc quand m�me � poser dans le forum de Swing ...
    Merci bcp.

  7. #7
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Je donnais cette classe de Swing en exemple de classe qui impl�mente une m�thode getParent().

    Elle sert � permettre � Swing essentiellement � manipuler la hi�rarchie de composants graphiques.

    Elle ne sert �videmment pas � permettre au mod�le de donn�es d'un composant de conna�tre les valeurs stock�es dans des mod�les d'autres composants de la GUI.

    Les mod�les n'ont pas � savoir qu'ils sont dans des composants graphiques, encore moins y acc�der. La communication est faite par le contr�leur (mod�le MVC) qui r�agit aux changements dans un mod�le (le mod�le ne fait que signaler qu'il y a un changement).

    Les mod�les peuvent communiquer �ventuellement entre eux, mais surtout pas via les composants d'UI, sauf cas vraiment tr�s particulier (qu'on ne peut pas r�soudre autrement � cause de contrainte d'impl�mentation de Swing). On peut �ventuellement refl�ter une hi�rarchie dans un mod�le qui encapsule les mod�les des composants qui seraient li�s dans l'UI.

    Par exemple, un arbre (JTree) avec des composants d'affichage du d�tail des items de l'arbre, dans lequel on voudrait afficher en ent�te un breadcrump, donc n�cessairement acc�der � la hi�rarchie des n�uds de l'arbre. Le mod�le de n�ud ne doit surtout pas passer par le JTree pour conna�tre son parent (surtout qu'il pourrait ne pas �tre affich� dans un JTree, en l'occurence, dans cet exemple, au moins dans JTree, un JComponent quelconque pour le d�tail, encore un autre pour le breadcrumb, etc).
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Initialisateur d'objet : setter la valeur d'une propri�t�
    Par Olivier C dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 24/04/2020, 19h48
  2. [PowerShell] Objet : rechercher le nom d'une propri�t� suivant une valeur
    Par arnaudperfect dans le forum Scripts/Batch
    R�ponses: 2
    Dernier message: 17/01/2018, 08h10
  3. R�ponses: 6
    Dernier message: 05/10/2017, 11h18
  4. R�cup�rer l'objet parent du contenu d'une balise object.
    Par Difr�91 dans le forum G�n�ral JavaScript
    R�ponses: 10
    Dernier message: 13/03/2011, 17h07
  5. [POO] Cr�er une instance d'un objet par la valeur d'une variable
    Par philworks dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 29/11/2007, 14h27

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