2009-08-18 5 views
3

J'essaie d'ajouter une icône à une colonne JTable particulier en spécifiant mon propre CellRenderer de table ci-dessous (based on parts of this tutorial):Ajout d'une icône à JTable en remplaçant DefaultTableCellRenderer

public class MyTableCellRenderer extends DefaultTableCellRenderer { 

    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 

     JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     if(column == MyTableModel.IMAGE_COLUMN){ 
      String status = (String)value; 
      Icon icon = StatusImageUtil.getStatusIcon(status); 

      if(icon == null){ 
       label.setText(status); 
      }else{ 
       label.setIcon(icon); 
      } 
     } 
     return label; 
    } 
} 

Le code ci-dessus fonctionne, mais:

  1. Toutes les cellules ont l'icône au lieu de celui spécifique i spécifié dans veux l'instruction if
  2. cellule MyTableModel.IMAGE_COLUMN qui devrait seulement avoir une icône a également texte.

Merci à l'avance

Répondre

4

Pour de meilleures raisons de performance JTable réutilise la même étiquette pour chaque cellule qu'elle rend. Cela signifie que vous devez définir le texte et l'icône chaque fois que vous le modifiez.

va de même pour les polices, backgroundcolors et autres

if(icon == null){ 
        label.setText(status); 
        label.setIcon(null); 
      }else{ 
        label.setText(""); 
        label.setIcon(icon); 
      } 

devrait faire l'affaire,

+0

merci, ne savait pas que la même étiquette est réutilisée pour toutes les cellules de table. En utilisant le code ci-dessus, j'ai toujours les mêmes résultats. Je l'ai résolu en mettant à zéro l'icône juste après avoir transformé le moteur de rendu de la table en JLabel. – n002213f

+0

yup mon adivce n'a pas aidé parce que j'ai oublié la colonne == MyTableModel.IMAGE_COLUMN test – Peter