1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| // Données de la table :
// (On préfèrera utiliser un TableModel pour mieux les gérer)
Object[][] data = new Object[50][];
for (int i=0; i<data.length; i++) {
data[i] = new Object[] { "Ligne #" + i , (Math.random()*1000.0-500.0) };
}
String[] names = {"Label", "Double"};
// Création de la JTable :
JTable table = new JTable(data, names);
// On crée un renderer spécial pour les Double
// qui modifiera la couleur du texte selon les cas
TableCellRenderer renderer = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// On réinitialise la couleur du texte :
this.setForeground(null);
// On appelle la méthode parente qui initialise tout le reste
// (Cette methode retourne 'this' :
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// On vérifie que la valeur correspond bien à un Double :
if (value instanceof Double) {
double d = (Double) value;
if (d < 0) {
// On met en rouge pour des valeurs négatives :
this.setForeground(Color.RED);
}
}
return this;
}
};
// On associe le renderer à la colonne :
table.getColumn(table.getColumnName(1)).setCellRenderer(renderer);
// Si on utilise un TableModel qui défini getColumnClass,
// on pourrait utiliser table.setDefaultRenderer() pour associer
// un renderer à un type d'objet particulier
// Puis on affiche le tout
JScrollPane scroll = new JScrollPane(table);
scroll.setPreferredSize(new Dimension(400,400));
JOptionPane.showMessageDialog(null, scroll); |
Partager