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

Composants Java Discussion :

[JList] Colorer lignes selectionnées après clic bouton


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut [JList] Colorer lignes selectionnées après clic bouton
    Bonsoir à tous,

    Je suis confronté à un problème que je n'ai pas encore réussi à résoudre.

    J'aimerai colorer les lignes sélectionnées d'une JList après avoir cliqué sur un bouton.
    Concrètement, les lignes resteront colorés si j'en sélectionne d'autres sans avoir touché au bouton.

    J'ai essayé de tester avec un classe étendant DefaultListCellRenderer mais sans résultat, les lignes se colorent à leur sélection et non pas après le clic bouton (ce qui parait logique)

    Merci pour votre précieuse aide.

  2. #2
    Expert éminent
    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 : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu dois créer ton listcellrenderer qui choisi la couleur en fonction des conditions (as-t-on déjà cliqué sur le bouton, etc). De plus, si les condition changent (exemple, on clique sur le bouton) il faut demander à ta liste de se redessiner (list.repaint())

  3. #3
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Salut,
    est-ce que tu voudrais simplement sélectionner un élément de la liste après clic sur le bouton, ou bien le colorer d'une autre couleur que celle de la sélection, et aussi mémorise les éléments sélectionnés par clic sur le bouton??

  4. #4
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    Salut,
    tu pourrais stocker les index des éléments sélectionné par clic du bouton dans un tableau, et puis tu redéfinis la méthode getListCellRendererComponent(...) de DefaultListCellRenderer qui retourne un ِComponent, tu retourneras un label par exp, tu testes dans cette méthode si l'index corresponds à un index présent dans le tableau déjà déclaré, si oui, tu changes le background du label, en ayant avant mis setOpaque(true)

    Je pense que ça ressemble à ça

  5. #5
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    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
    String[] valeurs = {"1", "2", "3", "4", "5"};
    //pour chaque index, on stocke son état
    final boolean[] indexes = new boolean[valeurs.length];
    for (int i = 0; i < indexes.length; i++)
    	indexes[i] = false;
    final JList list = new JList(valeurs);
    DefaultListCellRenderer renderer = new DefaultListCellRenderer() {
    	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    	{
    		JLabel lbl = new JLabel(value.toString());
    		lbl.setOpaque(true);
    //si ça a été déjà sélectionné par le bouton, couleur rouge
    		if (indexes[index])
    		{	
    			lbl.setBackground(Color.RED);
    		}
    		else
    			if (index == list.getSelectedIndex())
    				lbl.setBackground(Color.BLUE);
    		return lbl;
    	}
    };
    list.setCellRenderer(renderer);
    JButton btn = new JButton("Select");
    btn.addActionListener(new ActionListener()
    {
    	public void actionPerformed(ActionEvent ae)
    	{
    		indexes[list.getSelectedIndex()] = true;
    		list.repaint();
    	}
    });
    Rmq: tu dois d'abord sélectionner l'élément avec la souris, et après clic bouton pour le sélectionner avec une autre couleur

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    Merci pour vos réponses.

    Le problème dans tout ça, c'est que ma liste abrite des objets spécifiques "PlagePublicitaire" contenant plusieurs attributs.

    La méthode toString est surchargé ce qui permet un affichage personnaliser. Je ne peux pas utiliser de jLabel car il me faut récupérer les objets de la List ...

    Ton code pourrait marcher avec ce problème Herch ?

  7. #7
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    je ne vois pas le rapport.
    le label est utilisé seulement au niveau du dessin des cellules, donc, pour ta liste, tu continue d'utiliser getSelectedValue ou la méthode que tu utilises.
    Prends la peine de tester, et change le tableau de String par un tableau de tes objets, et on verra si ça marche ou pas??
    C'est plutôt à moi de te demander si le code marche

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

Discussions similaires

  1. [SP2007] rechargement page aspx après clic bouton
    Par James Dt dans le forum Développement Sharepoint
    Réponses: 8
    Dernier message: 12/07/2011, 09h33
  2. extendeddatatable : Colorer ligne selectionnée
    Par haskouse dans le forum JSF
    Réponses: 2
    Dernier message: 07/08/2009, 15h41
  3. Réponses: 3
    Dernier message: 06/03/2008, 15h15
  4. Faire disparaitre un bouton apres clic
    Par chris.lechat dans le forum Flash
    Réponses: 4
    Dernier message: 28/03/2007, 20h27

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