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 :

Coloration cellule JTable


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
    Novembre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 70
    Par défaut Coloration cellule JTable
    Bonjour,

    Je suis actuellement en train de lancer ma tête très fort sur le mur tant je désespère... je développe une petite application de compte pour mon propre plaisir , et je souhaite faire en sorte qu'un débit ait un foreground rouge dans ma JTable, et qu'un crédit ait un foreground noir.
    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
     
    private void changeCellColor(boolean debit, int row)
    {
      TableCellRenderer cellRenderer = this.table.getCellRenderer(row, 2);
      Component component = cellRenderer.getTableCellRendererComponent(this.table, null, false, false, row, 2);
     
      if(debit)
      {
        component.setForeground(Color.red);
      }
      else
      {
        component.setForeground(Color.black);			
      }
    }
    Problème : la ligne entière se colore en rouge (ce qui n'est pas très grave en soit), mais là où je me perds, c'est que dès que je sélectionne une autre ligne dans la JTable, elle se colore de la même couleur que le dernier changement. Par exemple si j'ai entré un débit, toutes les lignes sur lesquelles je clique ensuite (débits ou crédits) vont se colorier en rouge...

    En gros, quelqu'un sait-il comment fixer la couleur de ma ligne, pour qu'elle ne change plus par la suite ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Apparemment tu n'as pas compris le mécanisme des CellRenderer !

    Tu ne dois pas modifié un CellRenderer car il s'applique à plusieurs cellule (voir à tous si tu ne l'as pas redéfini).


    Un CellRenderer n'est pas un composant standard qui serait ajouté dans la table, mais un composant qui est réutilisé pour toutes les cellules : les valeurs sont changé et il est directement dessiné à l'écran.


    Il faut donc créer son propre CellRenderer qui affichera la valeur comme on veut, par exemple :
    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
    	// Données de la table :
    	// (On préfèrera utiliser un TableModel pour mieux les gérer)
    	Object[][] data = new Object[50][];
    	for (int i=0; i<data.length; i++) {
    		data[i] = new Object[] { "Ligne #" + i , (Math.random()*1000.0-500.0) };
    	}
    	String[] names = {"Label", "Double"};
     
     
    	// Création de la JTable : 
    	JTable table = new JTable(data, names);
     
    	// On crée un renderer spécial pour les Double
    	// qui modifiera la couleur du texte selon les cas
    	TableCellRenderer renderer = new DefaultTableCellRenderer() {
    		@Override
    		public Component getTableCellRendererComponent(JTable table,
    				Object value, boolean isSelected, boolean hasFocus,
    				int row, int column) {
     
    			// On réinitialise la couleur du texte : 
    			this.setForeground(null);
     
    			// On appelle la méthode parente qui initialise tout le reste
    			// (Cette methode retourne 'this' :
    			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
    			// On vérifie que la valeur correspond bien à un Double :
    			if (value instanceof Double) {
    				double d = (Double) value;
    				if (d < 0) {
    					// On met en rouge pour des valeurs négatives :
    					this.setForeground(Color.RED);
    				}
    			}
    			return this;
    		}
    	};
     
    	// On associe le renderer à la colonne :
    	table.getColumn(table.getColumnName(1)).setCellRenderer(renderer);
    	// Si on utilise un TableModel qui défini getColumnClass,
    	// on pourrait utiliser table.setDefaultRenderer() pour associer
    	// un renderer à un type d'objet particulier
     
     
    	// Puis on affiche le tout
    	JScrollPane scroll = new JScrollPane(table);
    	scroll.setPreferredSize(new Dimension(400,400));
    	JOptionPane.showMessageDialog(null, scroll);
    Toutes les valeurs négatives seront affiché en rouge...

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 70
    Par défaut
    Effectivement je n'avais pas tellement bien saisi l'utilisation de CellRenderer même si je me doutais que je l'utilisais très mal.

    Je te remercie, je teste ça dès que possible.

    EDIT : Ok ça marche, merci pour tout !

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

Discussions similaires

  1. Pb Cellule Jtable
    Par Karim93210 dans le forum Composants
    Réponses: 9
    Dernier message: 07/06/2007, 22h23
  2. Coloration cellule même ligne mais autre colonne
    Par lio33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/05/2007, 11h21
  3. Colorer ligne jtable
    Par mmb04 dans le forum Composants
    Réponses: 7
    Dernier message: 17/04/2007, 15h52
  4. colorer cellule tableau
    Par Mike35 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 27/07/2006, 14h57
  5. rafraichissement cellule JTable
    Par jdewalqu dans le forum Composants
    Réponses: 7
    Dernier message: 04/07/2006, 11h10

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