2015-08-30 2 views
0

Le problème que je rencontre est que lorsque je sélectionne une ligne, la cellule avec un rendu de cellule personnalisé ne met pas en surbrillance cette cellule mais les autres cellules.Mettre en surbrillance la cellule lorsque la ligne est sélectionnée

public Component getTableCellRendererComponent(
    JTable table, 
    Object value, 
    boolean isSelected, 
    boolean hasFocus, 
    int row, 
    int column) 
{ 
    setFont(ApplicationStyles.TABLE_FONT); 

    if (value != null) 
    { 
     BigDecimal decimalValue = toBigDecimal(value); 
     decimalValue = 
      decimalValue.setScale(2, BigDecimal.ROUND_HALF_EVEN); 

     DecimalFormat formatter = new DecimalFormat("$##,##0.00"); 
     formatter.setMinimumFractionDigits(2); 
     formatter.setMinimumFractionDigits(2); 
     String formattedValue = formatter.format(value); 
     setText(formattedValue); 
    } 
    return this; 
} 

Répondre

2

La meilleure façon de formater des données est de remplacer la méthode setValue(...) du rendu par défaut comme l'a démontré dans le tutoriel Swing sur Using Custom Renderers. Ensuite, vous n'avez pas à vous soucier de la mise en évidence.

Ou peut-être plus facile est d'utiliser le Table Format Renderer alors tout ce que vous devez fournir est le Format à être utilisé par le moteur de rendu.

+0

setValue (valeur d'objet) le rend tellement plus facile à formater .... merci – Grim

4

Vous devriez vérifier rendererisSelected et conditionner les Component couleurs en conséquence. Dans les grandes lignes,

@Override 
public Component getTableCellRendererComponent(
    JTable table, Object value, boolean isSelected, 
    boolean hasFocus, int row, int col) { 
    … 
    if (isSelected) { 
     setForeground(getSelectionForeground()); 
     setBackground(getSelectionBackground()); 
    } else { 
     setForeground(getForeground()); 
     setBackground(getBackground()); 
    } 
    return this; 
} 
+0

Voir aussi cette [Q & A] (http://stackoverflow.com/q/9607670/230513) discussion sur DefaultTableCellRenderer. – trashgod

+0

En outre, si l'op utilise DefaultTableCellRenderer, appelez simplement la super méthode, mais puisque l'op n'a pas fourni cette information, c'est la meilleure solution – MadProgrammer

+0

Je n'utilise pas le DefaultTableCellRenderer mais l'implémentation de TableCellRenderer – Grim