Bonjour,
Je suis en train de débuter la migration d'une appli vers java, et aimerai avoir un fonctionnement au niveau des tables qui me permette d'avoir les données automatiquement formattées en fonction de leur type.
C'est à dire que j'éxecute ma requête sur une base oracle ou mysql, je crée un table model à partir du dataset résultant de la requête executée, et ça rempli ma table. Rien de bien exceptionnel quoi.
Par contre je bloque au niveau du renderer. Je voudrai avoir un unique tableRenderer qui gère les types principaux (dates, booléens, etc...).
j'ai commencé à écrire un truc qui fonctionne partiellement, mais qui lance des exceptions, et bugs d'affichages.
En gros, l'idée c'est de renvoyer un objet de type différent en fonction de la classe de la valeur de la colonne, mais j'arrive pas à faire en sorte que ça tourne proprement. Je suis persuadé d'être à 2 doigts du trucs, puisque j'ai presque le resultat escompté !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package dao; import javax.swing.JTable; import javax.swing.JLabel; import javax.swing.JCheckBox; import java.awt.Component; import java.awt.Color; import javax.swing.table.DefaultTableCellRenderer; public class BooleanJTableRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { if (value.getClass().toString().equals(Boolean.class.toString())) { JCheckBox chk = new JCheckBox(); // if (value.getClass().toString().equals(Boolean.class.toString())) { // System.out.println("Renderer : " + value.getClass() + " -> " + value.toString()); chk.setHorizontalAlignment(JCheckBox.CENTER); if (value.toString().equals("true")) { chk.setSelected(true); } else { chk.setSelected(false); } return chk; } else { JLabel l = new JLabel(); l.setText(value.toString()); return l; } } }
Au niveau de la JTable, je fais ça pour spécifier le renderer et le table model
[CODE][
jTable1.setDefaultRenderer(Object.class, new BooleanJTableRenderer());
jTable1.setModel(TM);
/CODE]
Un grand merci à celui qui pourra m'aider là dessus
Seb,
Partager