2010-03-04 5 views
0

J'ai implémenté un JTable nommé scrTbl dans un programme, et je souhaite pouvoir faire varier la couleur du texte dans une colonne de cette table, basée sur une variable booléenne externe appelée "up". Mon code lié à cet effort est le suivant.Java JTable Problèmes TableCellRenderer

TableColumn tcol = scrTbl.getColumnModel().getColumn(9); 
tcol.setCellRenderer(new CustomTableCellRenderer()); 

public class CustomTableCellRenderer extends DefaultTableCellRenderer 
{ 
    @Override 
    public Component getTableCellRendererComponent (JTable table,  
    Object obj, boolean isSelected, boolean hasFocus, int row, int 
    column) 
    { 
     Component cell = super.getTableCellRendererComponent(table, 
      obj, isSelected, hasFocus, row, column); 

     if (up && (row == nmbrStocks)) 
     { 
      cell.setForeground(Color.green); 
     } 
     if ((!up) && (row == nmbrStocks)) 
     { 
      cell.setForeground(Color.red); 
     } 
     return cell; 
    }//Component 
} //class getTableCell... 

Le but est de définir la couleur du texte pour la colonne 9 et une rangée particulière (indexés de nmbrStocks) au vert ou le rouge, sur la base de la valeur maximale. Mais quand il s'exécute, il règle tout le texte en vert. Le moteur de rendu est-il appelé chaque fois qu'une cellule de la colonne 9 est écrite, ou quel est le protocole?

Merci d'avance pour toute aide.

Répondre

0

Puisque vous ne souhaitez que modifier une colonne, ajustez votre code pour spécifier la colonne ainsi que la ligne

if (row == nmbrStocks && column == the_desired_column_you_wish_to_change) 
    { 
     if (up){ 
     cell.setForeground(Color.green); 
     }else{ 
     cell.setForeground(Color.red); 
     } 
    }