Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1350 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [DefaultTableCellRenderer] couleurs ds 1 JTable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[DefaultTableCellRenderer] couleurs ds 1 JTable

n°988522
fleur1234
Posté le 21-02-2005 à 14:46:04  profilanswer
 

bonjour,  
J'ai posté ce message sur un autre forum mais vu que je n'ai pas de réponse je me permet de vous poser la question également.
Voilà, dans mon programme je veux colorier les cases d'une JTable uniquement si elles sont du type couleur et en fonction de la valeur qu'elles contiennent. Par exemple une case de type couleur aura pour valeur 12632256. On connait le type d'élément grâce à une chaîne de caractères passée en paramètre au début du programme.  
 
Je vérifie d'abord que l'élément est de type couleur et si il l'est je l'ajoute dans un hashtable :  
 

Code :
  1. nb_lignes = table.getRowCount();
  2.     int nb_col = table.getColumnCount();
  3.    Hashtable couleurs = new Hashtable();
  4.    for (int indice_ligne = 0 ; indice_ligne < nb_lignes ; indice_ligne++){
  5.      for (int indice_colonne = 0; indice_colonne < nb_col; indice_colonne++) {
  6.        String morceau = nom_colonnes.split(";" )[indice_colonne];
  7.        if (morceau.split("," )[2].equals("couleur" )) {
  8.        Color couleur = convertirCouleur((String) table.getValueAt(indice_ligne, indice_colonne));
  9.        couleurs.put((String) table.getValueAt(indice_ligne, indice_colonne),couleur);
  10.        }
  11.      }
  12.    }


 
 
Voici ma méthode de conversion :  
 

Code :
  1. public Color convertirCouleur(String c) {
  2.     int coul = Integer.parseInt(c);
  3.     int b = coul / 65536;
  4.     int v = (coul % 65536) / 256;
  5.     int r = ( (coul % 65536) % 256);
  6.     return new Color(r, v, b);
  7.   }


 
Contenu de ma classe héritant de DefaultTableCellRenderer :  
 

Code :
  1. package boutons;
  2. import java.util.*;
  3. import java.awt.*;
  4. import javax.swing.*;
  5. import javax.swing.table.*;
  6. import javax.swing.table.DefaultTableCellRenderer;
  7. import java.util.Hashtable;
  8. public class CustomTableCellRenderer extends DefaultTableCellRenderer{
  9.   private Hashtable couleur;
  10.    public CustomTableCellRenderer(Hashtable c) {
  11.    couleur = c ;
  12. }
  13.   public  Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  14.   Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  15.   CouleurRVB coul;
  16.   coul = new CouleurRVB((String)value,couleur);
  17.   cell.setBackground(coul.getCouleur());
  18. return cell;
  19. }
  20. }


 
 
Et pour finir voici ma méthode CouleurRVB qui en fonction du contenu de la cellule va renvoyer la couleur :  
 

Code :
  1. package boutons;
  2. import java.util.*;
  3. import java.awt.*;
  4. //Couleur des composants du planning  
  5. public class CouleurRVB
  6. {
  7.   private Hashtable couleurs; //hashtable de color ayant pour clé les cellules  
  8.   private String cell; //cellule  
  9.   public CouleurRVB(String cellule, Hashtable c)
  10.   {
  11.     cell = cellule;
  12.     couleurs = c;
  13.   }
  14.   //renvoie la couleur en fonction du type  
  15.   public Color getCouleur()
  16.   {    return (Color) couleurs.get(cell);
  17.   }
  18. }


 
Dans mon JTable les couleurs s'affichent en revenche j'ai perdu le focus. De plus lorsque je clic sur n'importe quelle case même une case blanche j'ai le message d'erreur suivant que je ne comprends pas :  
 
java.lang.NullPointerException at java.util.Hashtable.get(Hashtable.java:333)  
 
 
 
qui me renvoie à cette partie de la classe hashtable  

Code :
  1. public synchronized Object put(Object key, Object value) {
  2.    // Make sure the value is not null  
  3.    if (value == null) {
  4.        throw new NullPointerException();
  5.    }
  6.    // Makes sure the key is not already in the hashtable.  
  7.    Entry tab[] = table;
  8.    int hash = key.hashCode();
  9.    int index = (hash & 0x7FFFFFFF) % tab.length;
  10.    for (Entry e = tab[index] ; e != null ; e = e.next) {
  11.        if ((e.hash == hash) && e.key.equals(key)) {
  12.       Object old = e.value;
  13.       e.value = value;
  14.       return old;
  15.        }
  16.    }


 
C'est une histoire de pointeurs mais ça ne m'en dit pas +.  
 
Désolé si c'était un peu long mais quelqu'un comprends-il ou se situe mon erreur ? Sachant qu'aucune action autre qu'un simple affichage n'est censée se faire lorsque l'on clic sur la JTable.  
 
Merci de votre aide

mood
Publicité
Posté le 21-02-2005 à 14:46:04  profilanswer
 

n°988722
replix
Posté le 21-02-2005 à 16:57:43  profilanswer
 

Je pense que tu te complique la vie avec ta Hashtable et tout le reste. Dans ton ColorRenderer, appelle simplement une méthode statique pour parser la String et positionner la couleur :
 

Code :
  1. setBackground(parseColor((String) value));
  2. ...
  3. private static Color parseColor (String sColor){
  4. ...
  5. }


 
A priori tu connais la colonne qui affiche des couleurs. Il ne reste plus qu'à utiliser ce renderer sur les bonnes colonnes.


---------------
Gestion de bug en mode ASP/java : http://eap.bug-sweeper.fr

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [DefaultTableCellRenderer] couleurs ds 1 JTable

 

Sujets relatifs
Liens de différentes couleurs sur une même page à l'aide de css[Java] Ajouter une ligne a un Jtable
Remplir une JTable avec une BDDInversion de couleurs [Résolu]
jtableChanger les couleurs des puces??
Deselectionner dans un JTableJcheckBox dans une JTable ?
Couleurs tcellules selon texte 
Plus de sujets relatifs à : [DefaultTableCellRenderer] couleurs ds 1 JTable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR