2010-11-19 5 views
1

J'essaie de trier une table en utilisant rowsorter.JTable renderer avec le tri

RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); 
cTable.setRowSorter(sorter); 

J'utilise un moteur de rendu qui étend DefaultTableCellRenderer. J'utilise le moteur de rendu pour peindre le contenu de la cellule dans une couleur basée sur sa valeur.

cTable.setDefaultRenderer(Object.class,new <renderer name>()); 

par exemple:

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

     super.getTableCellRendererComponent(table, v, isSelected, hasFocus, 
        row, column); 
int k=table.getValueAt(row,column); 
    if (k >= 0)        this.setForeground(Color.red); 
} 

Note: Ceci est juste un échantillon réel fonctionnalité code.No. quand je trier, le tri se passe parfaitement mais la fonctionnalité de rendu de changer la couleur ne se produit pas. Quelqu'un at-il fait face à cette question plus tôt S'il vous plaît aider

Répondre

4

Vous devez étendre la logique dans votre générateur de:

if (isSelected) { 
    this.setForeground(table.getSelectionForeground()); 
} else if (k >= 0) { 
    this.setForeground(Color.red); 
} else { 
    this.setForeground(table.getForegroundColor()); 
} 

Vous pouvez également définir la couleur d'arrière-plan en fonction de chaque condition. La raison pour cela est que le DefaultTableCellRenderer agit comme un "tampon" qui est appliqué à chaque cellule à son tour. Si, par exemple, la cellule de la ligne 5, colonne 1 a la valeur k> = 0, alors vous passez la couleur de premier plan à rouge pour cette cellule et toutes les cellules suivantes. Par conséquent, il est important de explicitement redéfinir à la couleur de premier plan "normal" si votre vérification échoue.