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 :

Conserver la couleur d'une ligne modifiée


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut Conserver la couleur d'une ligne modifiée
    Bonjour,

    J ' ai une JTable que je remplis avec une arrayList
    La premiere colonne contient un JLabel qui au moyen d un cell renderer definit sa couleur comme etant rouge.

    Je voudrais faire en sorte que lorsque je clique sur une autre ligne , ca me met la couleur comme etant blanche.

    Ca marche moyennement en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if(isSelected)
    			{ setBackground(Color.WHITE);}
    	   else
              setBackground(Color.RED);
    sauf que si je clique sur une autre ligne , ca me remet la couleur rouge >_<
    Comment conserver la couleur d une ligne meme si j enclique sur une autre ?

    Merci bien

    mon renderer en entier:

    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
    public class ComposantsTableau extends DefaultTableCellRenderer {
     
    		private static final long serialVersionUID = 1L;
    		String path="Lu.jpg";
    		ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource(path));
    		  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
    		      boolean hasFocus, int row, int column) {
    			 // this.setText("case " + row + ", " + column);
    		    //this.setText((String) value);
    			 // this.setHorizontalAlignment(SwingConstants.LEFT);
    			 if(isSelected)
    			{
    				  setBackground(Color.WHITE);
    					//setIcon(null);
    			}
    			else
    				 setBackground(Color.RED);
    				 //setIcon(icon);
    			return this;
    		  }
    		}
    et comment je l ' appelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeMessage.getColumnModel().getColumn(0).setCellRenderer(new ComposantsTableau());

  2. #2
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Histoire de voir si j'ai bien compris ce que tu veux faire (ça pourra aider les autres je pense):

    Tu veux que lorsque tu clique sur l'une des lignes de ta table (le label de la colonne spécifiée qui sont tous rouges au départ), le label de cette ligne devienne blanc et qu'il le reste si jamais tu clique sur une autre ligne. Donc si jamais on clique sur toutes les lignes du tableau, les unes après les autres, tous les labels deviendront blancs?

    Si c'est bien ça je dirais qu'il faut que tu stocke les index des lignes dans une liste dans ton renderer et que tu dise de colorer le label en blanc si jamais le numéro de la ligne est dans la liste de lignes.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    oui, c est exactement ca

    je vais essayer ta solution et je te tiens au courant.

    Merci de ton aide

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    J ' ai teste , mais ca ne fonctionne pas
    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
     
    List<String>liste=new ArrayList<String>();
    liste.add(String.valueOf(row));
    for(int i=0;i<liste.size();i++)
    			  {
    				  System.out.println("donnée à l'indice " + i + " = " + liste.get(i));
     
    				  if(liste.get(i)==value)
    					{
    						  setBackground(Color.WHITE);
    							//setIcon(null);
    					}
    					else{
    						 setBackground(Color.RED);}
    						 //setIcon(icon);
     
    				  }
    			  return this;
    		  }
    }
    une idée svp ?
    merci bien

  5. #5
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    J'ai testé rapidement et avec un listener dans ce 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
     
    	final ComposantTableau cellRenderer = new ComposantTableau();
    		  table.getColumnModel().getColumn(0).setCellRenderer(cellRenderer);
             final ListSelectionListener listener = new ListSelectionListener() {
     
    			public void valueChanged(final ListSelectionEvent e) {
    				final ArrayList<Integer> selectedRows = cellRenderer.getSelectedRows();
    				final int first = e.getFirstIndex();
    				final int last = e.getLastIndex();
    				for (int i = first; i <= last; i++) {
    					selectedRows.add(i);
    				}
    				cellRenderer.setSelectedRows(selectedRows);
    			}
    		};
    		table.getSelectionModel().addListSelectionListener(listener);
    		table.getColumnModel().getSelectionModel().addListSelectionListener(listener);
    et un renderer comme ça :

    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
     
    public class ComposantTableau extends DefaultTableCellRenderer {
     
    	private ArrayList<Integer> selectedRows;
     
    	public ComposantTableau() {
    		super();
    		this.setSelectedRows(new ArrayList<Integer>());
    	}
     
    	@Override
    	public Component getTableCellRendererComponent(final JTable table, final Object value,
    			final boolean isSelected, final boolean hasFocus, final int row, final int column) {
    		if (getSelectedRows().contains(row)) {
    			setBackground(Color.WHITE);
    		} else {
    			setBackground(Color.RED);
    		}
    		return this;
    	}
     
    	public ArrayList<Integer> getSelectedRows() {
    		return selectedRows;
    	}
     
    	public void setSelectedRows(final ArrayList<Integer> selectedRows) {
    		this.selectedRows = selectedRows;
    	}
    }
    tu devrais pouvoir t'en sortir en perfectionnant ce que j'ai fait

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    salut
    merci de ton aide tres precieuse

    ca fonctionne plutot bien , si je selectionne les index des lignes les uns apres les autres(ex : index 0, index 1)
    mais si je selectionne par exemple la ligne 1 , puis la ligne 7, toutes les lignes entre elles affichent aussi la couleur blanche alors que je n ' ai pas cliqué dessus.

    C ' est le meme probleme qu ' avec le isSelected en fait
    comment resoudre cela ?

    Merci encore de ton aide

  7. #7
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    J'ai pas trop le temps de chercher aujourd'hui, creuse du côté des autres listeners peut être, je n'ai pas beaucoup travailler avec les JTable je sais pas trop comment il faut contourner ce problème d'index.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Merci de ton aide
    Tu m ' as déjà beaucoup aide
    Je viens de tester avec des JList et il n y a pas de souci.

    Je pense donc que le pb vient du renderer car je ne vois pas ce qui peut clocher sinon
    Il doit avoir un comportement par défaut a mon avis: si je clique sur un index , puis sur un autre ,les index qui sont entre prennent les mêmes propriétés que si on avait clique dessus.

    Il doit y avoir un moyen de contourner ce problème.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    up svp
    J ' ai essaye cette journée encore , sans succès
    Je n arrive pas trouver ce probleme d ' indexation

    Merci

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour faire plus correct, il serait de bon aloi de stocker la couleur de la ligne dans le modèle de la JTable, puis que le renderer s'appuie sur l'information contenue dans le modèle pour déterminer la couleur de la ligne.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Merci de ta réponse , mais je n ' ai pas tres bien compris le début.
    En gros , je dois faire 2 modèles: un qui comporte toute ma liste , et un 2 eme qui contiendra les lignes cliquees et qui remplacera le premier
    C ' est bien ca ?

    Merci de ton aide

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Non un seul modèle qui contienne à la fois les données de la table et le statut des lignes (cliquées ou non)

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    désolé d avoir tardé a répondre , mais j ' étais passé sur un autre projet( car j ' en ai plusieurs en parallèle)

    ta solution fonctionne bien sinok
    thx

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/12/2009, 20h43
  2. JXTable - Modifier couleur d'une ligne
    Par Lebas dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/03/2008, 19h51
  3. Réponses: 2
    Dernier message: 28/08/2007, 16h03
  4. [D7] Modifier la couleur d'une ligne d'un DBdataGrid
    Par celine33 dans le forum Bases de données
    Réponses: 13
    Dernier message: 28/09/2006, 16h14
  5. [C#] [DataGrid] Modifier la couleur d'une ligne
    Par nalaya dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/08/2004, 12h11

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