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

Java Discussion :

prendre le retour d'une fonction comme nom d'une constante


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 59
    Points : 26
    Points
    26
    Par défaut
    Bonjour
    Partons d'une fenetre avec un panneau et une combox la sections d'une mention dans la combo box change la couleur du panel en Swing.
    Je mettais des if successif pour savoir ce qui avait été selectionné pour attribuer la couleur correspondante j'aimerais savoir si c'est possible de prendre le résultat directement pour définir ma fonction...
    je vais vous montrer ce que je veux avec un exemple de code ça sera plus simple :
    voici ce que je veux mettre dans actionPerformed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setBackground(Color.[Box.getSelectedItem()]);
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     String Choix = (String)((JComboBox)Ae.getSource()).getSelectedItem();
            this.setBackground(Color.[Choix]);
    ce qui est entre [] n'est pas bon j'aimerai savoir s'il a un moyen de l'adapter pour que le resultat definisse l

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 627
    Points : 15 788
    Points
    15 788
    Par défaut
    Ce que tu souhaites est techniquement faisable en utilisant l'introspection: http://ricky81.developpez.com/tutori...pi/reflection/

    Mais dans ton cas vu le faible nombre de couleur défini dans l'API, je pense qu'il est plus simple de te faire une hashmap qui fait correspondre la chaine a l'objet couleur correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HashMap<String,Color> colormap = new HashMap<String, Color>();
    colormap.put("red", Color.red);
    colormap.put("blue", Color.green);
    ...
    this.setBackground(colorMap.get(Box.getSelectedItem()));

  3. #3
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    bonjour.
    tu peut pas avoir un objet Color apartir de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((JComboBox)Ae.getSource()).getSelectedItem();
    donc tu peut tout simplement remplacer tes if successive par un switch si tu travaille avec un JDK 7

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par slim_java Voir le message
    donc tu peut tout simplement remplacer tes if successive par un switch si tu travaille avec un JDK 7
    Une hashmap ou une enum resterais plus propre. De plus, JDK7 ne sortira qu'en septembre 2010, je crois que l'auteur de la question espère une solution utilisable plus tôt


    Enfin, utiliser directement un Array de java.wat.Color dans ta combobox plutot qu'un array de String serait plus judicieux. Après tout tu choix une couleur, pas une String.

  5. #5
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Une hashmap ou une enum resterais plus propre. De plus, JDK7 ne sortira qu'en septembre 2010, je crois que l'auteur de la question espère une solution utilisable plus tôt

    j'ai pas essayer mais il peut utiliser un build

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    sinon le plus propre reste encore de stocker directement les objets Color dans ton JComboBox et d'utiliser un customRenderer ad-hoc:
    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
    47
    48
    49
    50
    51
    52
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JList;
     
     
    public class TestColor extends JFrame {
     
    	private JComboBox myBox;
     
    	public TestColor(){
    		myBox = new JComboBox(new Object[]{Color.BLACK,Color.BLUE, Color.RED});
    		myBox.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				getContentPane().setBackground((Color)myBox.getSelectedItem());
    			}
    		});
    		myBox.setRenderer(new DefaultListCellRenderer(){
     
    			@Override
    			public Component getListCellRendererComponent(JList list,
    					Object value, int index, boolean isSelected,
    					boolean cellHasFocus) {
    				setMinimumSize(new Dimension(30,10));
    				setPreferredSize(new Dimension(50,20));
    				setText("");
    				if (value!=null)
    					setBackground((Color)value);
    				return this;
    			}});
    		setSize(400,150);
    		getContentPane().setLayout(new FlowLayout());
    		getContentPane().add(myBox);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new TestColor().setVisible(true);
    	}
     
    }

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 59
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos réponses!
    L'objet couleur était juste un exemple parce que ça se présentait dans mon exo... j'aurrai bien aimé une méthode qui puisse permettre de changer directement le code mais niveau sécurité et niveau byte code ça doit pas avoir de logique...

    Encore mes excuses aux modos pour avoir posté 2 fois le même sujet involontairement)

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par Syphys Voir le message
    changer directement le code mais niveau sécurité et niveau byte code ça doit pas avoir de logique...
    De fait, java est un language compilé, pas un language interprété.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/08/2011, 10h25
  2. Passer une Fonction comme argument d'une fonction
    Par ch16089 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/02/2011, 18h58
  3. passer le nom d'une fonction comme paramètre d'une autre fonction?
    Par med_alpa dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/03/2010, 13h57
  4. [Langage] une fonction comme argument d'une fonction?
    Par Krishna dans le forum Langage
    Réponses: 9
    Dernier message: 15/10/2008, 21h31
  5. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 21h15

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