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

Interfaces Graphiques en Java Discussion :

Renderer Jcombobox (Problème de selection)


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut Renderer Jcombobox (Problème de selection)
    Bonjour,

    Mon objectif est d'afficher deux JLabel dans ma combobox.
    Le renderer fonctionne très bien mais je n'arrive pas a sélectionner un index via la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setSelectedItem(i);
    L'index 0 est toujours selectionné.

    J'imagine que j'oublie quelques choses?

    Je pose ci dessous le code de mon renderer:
    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
    		public MyRenderer() {
    			super();
    //Je crée deux Jlabel que j'ajoutent à mon layout
    			setLayout(new GridLayout(0, 2));
    			for (int x = 0; x < this.lbl.length; x++) {
    				this.lbl[x] = new JLabel();
    				this.lbl[x].setOpaque(true);
    				add(this.lbl[x]);
    			}
    		}
     
    		@Override
    		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
    //Je récupere et affichent mes deux string sous 2 jlabels
    			if (value != null)
    					this.lbl[0].setText(((String[]) value)[0]);
    					this.lbl[1].setText(" " + ((String[]) value)[1].replaceFirst("R_", "").toLowerCase());
    				}
    			if (isSelected)
    				this.lbl[0].setBackground(Color.lightGray);
    			else
    				this.lbl[0].setBackground(Color.white);
    			return this;
    		}
    	}
    Merci pour vos réponses

  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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    ton problème ne peut pas venir du renderer, mais de la façon que tu sélectionnes ton item et des objets contenus dans le modèle :

    • soit par setSelectedItem(Object), qui te permet de sélectionner une instance donnée contenue dans le modèle de la combo
    • soit par setSelectedIndex(int), qui te permet de sélectionner une instance d'index donné dans le modèle


    Au vu du nom de la variable utilisée (i), je suppute que tu voulais utiliser setSelectedIndex, et pas setSelectedItem
    .

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Points : 33
    Points
    33
    Par défaut
    Ok merci de ta réponse c'est bien ça

    Je comprends pas comment j'ai pas pu remarquer que je m’étais trompé...

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Simple question, pour que la méthode setSelectedItem(Object) fonctionne, il faut que l'Objet passé en paramètre ait sa méthode hashcode() surchargé ou non ?

    Merci de vos réponses.

  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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non. La surcharge de la méthode hashcode() n'est nécessitée que par une implémentation de la méthode equals() (pour que 2 instances égales aient le même hashcode), en général. Mais rien à voir avec les combobox.

    Par contre, si tu as des instances de classe A dans ton modèle, et que tu passes une instance de classe B à la méthode setSelectedItem(), et que tu implémentes equals() et hashcode() de B, pour qu'il y ait égalité entre des instances de B et des instances de A, tu pourras effectivement sélectionner des items alors que leur classe est A. Mais tu n'es pas obligé d'implémenter hashcode() de B à cause de la combo, mais parce que tu as implémenté equals(). Si tu ne le faisais pas, l'exemple suivant fonctionnerait aussi.

    Dans l'exemple suivant, on sélectionne bien "Carole" dans le combo.
    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
    public class TestCombo {
     
    	public static void main(String[] args) {
     
    		JFrame frame=new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JComboBox<String> combo = createCombo();
    		combo.setSelectedItem(new Object() {
    			@Override
    			public boolean equals(Object obj) {
    				return "Carole".equals(obj);
    			}
     
    			@Override
    			public int hashCode() {
    				return "Carole".hashCode();
    			}
     
    		});
    		frame.getContentPane().add(combo);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static JComboBox<String> createCombo() {
    		String[] items = {"Aline","Barbara","Carole","Djamila","Erika"};
    		JComboBox<String> combo = new JComboBox<>(items);
    		return combo;
    	}
    }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2011, 11h01
  2. [JComboBox] l'Objet selected s'affiche dans le Renderer
    Par grabriel dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/03/2007, 15h08
  3. [JComboBox] Problème de renderer
    Par hush dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 31/07/2006, 10h44
  4. problème DBLookupListBox selection
    Par kardevlop dans le forum Bases de données
    Réponses: 11
    Dernier message: 17/08/2004, 12h53
  5. [swing][JComboBox]Problème de taille
    Par n!co dans le forum Composants
    Réponses: 8
    Dernier message: 06/03/2004, 11h53

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