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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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