Je travaille sur un projet personnel avec Java et Swing sous Eclipse. J'ai une JTable personnalisée pour rendre les cellules."prepareRenderer" ne fonctionne pas lorsque je mets des données de xml dans mon customJTable
public class CustomJTable extends JTable{
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// change background of rows if [row,13] is even
c.setBackground(getBackground());
if((int)getModel().getValueAt(row, 13) %2 == 0)
c.setBackground(Color.YELLOW);
// change font, border e background of cells if a string field is equal to some predeterminated value
Font myFont = new Font(TOOL_TIP_TEXT_KEY, Font.ITALIC | Font.BOLD, 12);
c.setForeground(getForeground());
if (getModel().getValueAt(row, column)=="VALUE"){
((JComponent) c).setBorder(new MatteBorder(1, 1, 1, 1, Color.RED)); //needs cast for using setBorder
c.setFont(myFont);
c.setForeground(Color.RED);
c.setBackground(new Color(255, 230, 230));
}
//set disabled cells appearance
if (getModel().getValueAt(row, column)=="DISABLED"){
((JComponent) c).setBorder(new MatteBorder(1, 1, 1, 1, Color.GRAY));
c.setForeground(Color.LIGHT_GRAY);
c.setBackground(Color.LIGHT_GRAY);
}
return c;
}
Mon CustomJTable prendre des valeurs d'une coutume TableModel (étend AbstractTableModel) qui contient un vecteur de classe avec des méthodes overrided.
Si j'ajoute un élément dans le vecteur avec quelque chose comme ceci myModel.getVector().add(element)
Je n'ai aucun problème. Une fois que j'ai tapé myTable.updateUI()
, Row est automatiquement ajouté à CustomJtable et il est également affiché. Tout est parfait!!!
Le problème se produit lorsque j'essaie d'ajouter des lignes d'un fichier .XML externe que j'ai enregistré auparavant. Les données que j'ai ajoutées à ma JTable sont correctes, l'arrière-plan des lignes JAUNES a également changé, mais les cellules ne sont pas rendues (pas les bordures des cellules, pas les polices, pas les cellules rouges).
J'ai tout essayé. validate()
, repaint()
, fireTableCellChanged()
... Je ne trouve pas d'erreur. Quelqu'un peut-il m'aider?
OMG, merci beaucoup. Je suis revenu à Java depuis plusieurs années et je n'ai pas fait la différence entre les index de vue et les index de modèles. C'était le problème! –