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 :

[debutante] [JTable] Comment changer la couleur d'une ligne?


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 26
    Points
    26
    Par défaut [debutante] [JTable] Comment changer la couleur d'une ligne?
    Bonjour,
    je voudrais changer la couleur ou "setenabled" des lignes de mon Jtable selon la valeur d'un champ de la ligne.
    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Ca ne serait pas la méthode setGridColor() de Jtable?
    Jete un oeil dans la javadoc...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 26
    Points
    26
    Par défaut
    cette méthode change la couleur pour toutes les lignes.
    moi je voudrais trouver un ( ou un moyen de le coder) qui fait
    setcolor(int row, Color color)

    Merci.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    tu doit créer une classe qui hérite de JLabel et qui implémente TableCellRenderer
    et ensuite ajouter ce renderer à ta table
    dans le code suivant , un exemple de personnalisation d'affichage de cellule

    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
     
    public class CellObjectRenderer extends JLabel implements TableCellRenderer
    {
     
    public CellObjectRenderer() 
    {
      super();
      setOpaque(true); // A NE PAS OUBLIER sinon ca marche pas
    }
     
      /**
       * méthode personnalisant les couleurs de la cellule.
       * @param table
       * @param value
       * @param isSelected
       * @param hasFocus
       * @param row
       * @param column
       * @return le component à afficher
       */
    public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
     
       setText((String) value);
       if ( (row%2) != 0) //ligne impaire
       { 
          setBackground(Color.blue);
        }
        else // ligne paire
        { 
          setBackground(Color.green);
        }
     
       if(isSelected)// ligne selectionné
        {
            setBackground(Color.red);
            setForeground(Color.orange);
        }
       else//si pas selectionné
        {
           setForeground(Color.pink); 
        }
     
         return this;
    }
     
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     CellObjectRenderer objRender = new CellObjectRenderer(); 
      ta_table.setDefaultRenderer(java.lang.Object.class,objRender);

  5. #5
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut
    dite moi j'ai un petit problème avec l'utilisation de cette class : j'ai un class cast Exception lors de l'appel de la fonction.
    d'aillieur c'est la première foi que je voi ça : return this;

    mon code :
    NB : l'Exception n'est pas levée ici mais en amont !

    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
    public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    	{ 
    		Class cl = table.getColumnClass(column);
    		if(!cl.equals(String.class))return this;
    		setText((String)value); 
    		try
    		{
    			TableModel tm = table.getModel();
    			Integer QT = (Integer)tm.getValueAt(row,6);
    			int qt = QT.intValue() ;
    			if ( qt == 0 )
    			{
    				setBackground(Color.YELLOW);
    			}
    		}
    		catch(Exception e)
    		{
    			System.out.println("ERROR dans ....");
    			System.out.println(e+"\n");
    		}
    		return this; 
    	}

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TableModel tm = table.getModel(); 
    Integer QT = (Integer)tm.getValueAt(row,6); 
    int qt = QT.intValue()
    essaye plustot avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int qt =Integer.ParseInt((String) tm.getValueAt(row,6));

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 27
    Points : 26
    Points
    26
    Par défaut
    Merci.
    ça marche impecc

  8. #8
    xhi
    xhi est déconnecté
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Slt,

    désolé de répondre aussi tard ( et je crois même que tu as déjà résolu ton affaire) mais voici un peu de code qui peut éviter des recherches à certains.

    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
     
        TableSorter sorter = new TableSorter( new ModelTable( donneeTableau.length == 0 ?
            1 : donneeTableau.length, enteteTableau ) );
     
     
     
        JTable tab = new JTable( sorter ) {
     
          public Component prepareRenderer( TableCellRenderer renderer, int row, int column ) {
            Component component = super.prepareRenderer( renderer, row, column );
            int ii = 0;
     
            if ( Page.this.getSource().getTypeActif() == Fenetre.OF ) {
     
              double delta = Integer.parseInt( String.valueOf( this.getValueAt( row, 2 ) ) ) * 0.02;
              int ecart = Integer.parseInt( String.valueOf( this.getValueAt( row, 3 ) ) );
     
              if ( Math.abs( ecart ) > delta
                   && String.valueOf( this.getValueAt( row, 4 ) ).equals( "Soldé" ) )
                component.setForeground( Color.RED );
              else
                component.setForeground( Color.BLACK );
     
            } else {
     
              if ( Page.this.getSource().getBoutonActif() == Fenetre.CONDITIONNEMENT ) {
                while ( ii < ligneRouge.size() ) {
                  if ( row == Integer.parseInt( (String) ligneRouge.elementAt( ii ) ) )
                    component.setForeground( Color.RED );
                  else
                    component.setForeground( Color.BLACK );
                  ii++;
                }
              }
            }
     
            component.setFont( new Font( "Arial", Font.PLAIN, 14 ) );
     
            return component;
          }
     
        };
     
        sorter.setTableHeader(tab.getTableHeader());
    Voila, cette exemple évite d'utiliser des JLabel en composant (moins pénible d'utilisation) et permet de montrer comment trier à partir d'un clic sur l'entete d'une colonne (vite fait...). Sinon row et column représentent les lignes et les colonnes...

    A plous_

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/11/2009, 11h55
  2. comment changer la couleur d'une ligne dans dbgrid?
    Par dj_techno dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/10/2008, 08h25
  3. Réponses: 5
    Dernier message: 18/06/2008, 17h06
  4. Comment changer la couleur d'une Ligne DATAGRIDVIEW ?
    Par mehdiyou dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/04/2008, 13h43
  5. Réponses: 7
    Dernier message: 13/11/2006, 12h12

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