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
| final String[] names = { "Pas formaté", "Formaté" };
// On remplit les données de la JTable avec des valeurs aléatoire
// (c'est juste pour l'exemple : un TableModel serait plus approprié
// dans la majorité des cas)
final Object[][] data = new Object[50][];
for (int i=0; i<data.length; i++) {
double value = Math.random() * 100;
data[i] = new Object[] { value, value };
}
// On crée notre JTable :
JTable table = new JTable(data, names);
// On crée notre TableCellRenderer qui se contente de formatter les données :
final TableCellRenderer doubleRenderer = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// On formatte notre valeur :
String formattedValue = String.format("%.2f", value);
// Et on appelle la méthode parente qui gère tout le reste
// (couleur, selection, focus, etc.)
return super.getTableCellRendererComponent(table, formattedValue,
isSelected, hasFocus, row, column);
}
};
// Pour formatter une colonne spécifique :
table.getColumnModel().getColumn(1).setCellRenderer(doubleRenderer);
// Si on aurait utiliser un modèle, on aurait pu utiliser ceci :
// (à condition d'implémenter correctement TableModel.getColumnClass())
//
// table.setDefaultRenderer(Double.class, doubleRenderer);
JScrollPane scroll = new JScrollPane(table);
scroll.setPreferredSize(new Dimension(300,300));
JOptionPane.showMessageDialog(null, scroll); |
Partager