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 :

appeler une fonction selon la valeur d'un string


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 54
    Points
    54
    Par défaut appeler une fonction selon la valeur d'un string
    Bonjour,Je suis en train de developper un programme dont le fonctionnement est le suivant:
    - J'ai un objet personne qui contient un certain nombre d'attribut (nom, prenom, age...) chacun avec son getter et son setter.
    - Et j'ai une interface graphique sur laquelle je veux afficher ses infos sur la personne. Avant de les afficher, je cherche les label pour ses info sur un fichier .properties (question d'afficher ou de cacher les champs selon besoin).
    - J'arrive à recupperer mes label à partir du .properties et je les affiche nickel, je veux a présent pouvoir passer l'objet personne en paramétre à ma fonction AffichageLabel() et de pouvoir appeler le getter equivalent à mon label à afficher, pour pouvoir recupperer sa valeur.
    J'ai chercher un peu à propos de ce sujet et il parait que l' "introspection" permet de faire ça, mais j'avoue que j'ai du mal encore a comprendre ce concept.

    Merci pour votre aide.

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    commence donc par jeter un coup d'œil dans la faq

    et utilises la javadoc pour compléter

    tu as une description du concept dans le premier article

    bon courage !
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    bon j'ai essayé de voir, mais j'avoue que j'ai toujours du mal a comprendre ce truc...
    Voici mon code pour mieux comprendre ce dont j'ai besoin
    Ma classe Person.java
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    package test;
     
     
    public class Person
    {
     
        protected String id;
     
        protected String pin;
     
        protected String spin;
     
     
     
     
        public String getId()
        {
            return id;
        }
        public void setId(String value)
        {
            this.id = value;
        }
     
     
        public String getPin()
        {
            return pin;
        }
        public void setPin(String value)
        {
            this.pin = value;
        }
     
     
        public String getSpin()
        {
            return spin;
        }
        public void setSpin(String value)
        {
            this.spin = value;
        }
    }
    et mon programme qui affiche mon frame
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    package test;
     
    import java.awt.GridBagLayout;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
     
    import com.sun.org.apache.bcel.internal.verifier.structurals.Frame;
     
    public class Prog extends JFrame{
     
    	public Prog(){
    		super();
    		this.setSize(400, 400);
    		this.setLayout(new GridBagLayout());
    		Person p = new Person();
    		p.setId("id20");
    		p.setPin("pin30");
    		p.setSpin("Spin40");
    		init(p);
    	}
     
    	public void init(Person p){
    		String s = new String("Id"); //s peut contenir aussi Pin ou Spin
    		/* Faire mon traitement ici, ce qui va me permettre de recuperer la valeur du string s. */ 
    		JLabel l1 = new JLabel("Label :");
    		JLabel l2 = new JLabel(/*ce qu'a retourné le get equivalent*/);
    		this.add(l1);
    		this.add(l2);
    	}
     
     
     
     
     
    }
    Merci encore.

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Bah si tu mettais le code affichageLabel(), ce serait bien

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Je ne comprends pas ou tu bloques. Le lien sur la FAQ donné ci-dessus est d'une limpidité cristaline. Il contient exactement et précisément ce que tu recherches. Qu'est-ce que tu ne comprends pas dans l'exemple de la FAQ ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    Entre nous, je ne vois pas quel exemple de la FAQ correspond a mon probléme.

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    Attendez un peu,
    Pour mon exemple , je viens de faire ça, je crois que ça doit normalement marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    afficheValeur(p, "id");
    .......
     
    void afficheValeur(Object obj, String nomChamp) throws Exception
    	{
    	   Field f = obj.getClass().getField(nomChamp);
    	   System.out.println(f.get(obj));
    	}
    Avec p l'objet personne.
    Mais ça donne l'erreur suivante:
    IWAV0052E Invocation Target Exception creating test.Prog..Vous avez une idée.

  8. #8
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    tu as 2 solutions

    • soit tu utilises l'exemple du lien que je t'ai donné, qui te donnera la valeur du champ sans passer par le getter
    • soit tu prends celui en dessous, pour appeler la méthode qui te convient


    tu as juste à passer ton objet Personne ainsi que le nom du champ/ du getter que tu veux utiliser

    la meilleure façon de comprendre, c'est de mettre les mains dans le cambouis et de tester !

    EDIT: exactement ce que je te disais
    regarde dans la javadoc la description des methodes Class.getField et Class.getDeclaredField
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    Merci Gardyen,
    Je te tiendrais au courant si j'arrive a faire marcher ce truc...

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    ça marche les amis, Voici ce que j'ai trouvé comme solution finalement:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    package test;
     
    import java.awt.GridBagLayout;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    import sun.reflect.Reflection;
     
     
    import com.sun.org.apache.bcel.internal.verifier.structurals.Frame;
     
    public class Prog extends JFrame{
     
    	public Prog() throws Exception{
    		super();
    		this.setSize(400, 400);
    		this.setLayout(new GridBagLayout());
    		Person p = new Person();
    		p.setId("id20");
    		p.setPin("pin30");
    		p.setSpin("Spin40");
    		System.out.println(getValueUsingGetter(p, "id"));
    	}
     
    	 public static Object getValueUsingGetter(Object obj, String fieldName) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    		String methodName = null;
    		methodName = "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
    		Class classes[] = {};     
    		Method method = obj.getClass().getMethod(methodName, classes);
    		Object args[] = {};
    		return method.invoke(obj, args);
     
    	}
     
     
     
     
     
     
     
    }
    Merci pour votre aide et à la prochaine. Merci encore.

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

Discussions similaires

  1. Transmission valeur cellule pour appeler une fonction
    Par SI-SHARE dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/04/2013, 14h44
  2. Comment appeller une fonction pour récupérer 2 ou + de valeurs
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 28/01/2009, 07h14
  3. Réponses: 3
    Dernier message: 19/03/2008, 22h11
  4. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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