bonsoir
je vous écris car j'ai créé une jtable avec un modèle héritant de AbstractTableModel, et la ligne d'en-tête s'affiche corresctement mais pas les autres (les lignes de données).
je n'ai trouvé aucun bug dans mon code, aussi je vous le soumets pour avoir de l'aide.
voici mon modèle:
les variables de la classe Fenetre_2 :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 public class Liste_rdv_minimum extends AbstractTableModel { public static Connection connexion = null; public List<RDV> rdvs = new ArrayList<RDV>();; private String[] columnNames = { "dossier", "nom", "prenom", "mobile", "type examen", "date examen", "heure examen", "site", "modalite", "est envoye", "statut" }; /** * */ private static final long serialVersionUID = 4186252673765189931L; @Override public int getRowCount() { return rdvs.size(); } @Override public int getColumnCount() { return 11; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO date d'examen affichée en popup sur survol de date d'appel switch (columnIndex) { case 0: return rdvs.get(rowIndex).NUMRDV; case 1: return rdvs.get(rowIndex).NAME; case 2: return rdvs.get(rowIndex).SURNAM; case 3: return rdvs.get(rowIndex).NUMTEL; case 4: return rdvs.get(rowIndex).TYPEXA; /* * case 5: return get(rowIndex).DATTEL; case 6: return * get(rowIndex).TIMTEL; */ case 5: SimpleDateFormat dateFormat = new SimpleDateFormat( "EEEE d MMM yyyy", Locale.FRANCE); return dateFormat.format(rdvs.get(rowIndex).DATEXA); case 6: SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); // System.out.println("heure : " + rdvs.get(rowIndex).TIMEXA); return sdf.format(rdvs.get(rowIndex).TIMEXA); case 7: return rdvs.get(rowIndex).SITE; case 8: return rdvs.get(rowIndex).MODLTE; case 9: return rdvs.get(rowIndex).ENVOYE; case 10: return rdvs.get(rowIndex).STATUT; default: break; } return null; }(...)
notez que la JTable est statique... je ne sais pas si c'est important.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class Fenetre_2 { public static Liste_rdv_minimum al_atraiter = null; public JFrame frame; Timer timer_oracle = new Timer("timer_oracle"); Timer timer_horaire = new Timer("timer_horaire"); public static JTable table;
le constructeur de la fenêtre:
et la méthode la plus importante : initialize:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public Fenetre_2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, InterruptedException { al_atraiter = new Liste_rdv_minimum(); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager .setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel"); initialize(); }
il y a d'autres lignes dans initialize mais elles lancent deux threads et je pense que cela n'a rien d'important ici.
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 private void initialize() throws InterruptedException { frame = new JFrame(); frame.setBounds(100, 100, 669, 438); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.getContentPane().setLayout(null); JLabel lblNewLabel = new JLabel("ENVOI DE SMS"); lblNewLabel.setBounds(0, 32, 661, 37); lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 30)); lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER); frame.getContentPane().add(lblNewLabel); table = new JTable(al_atraiter); table.setDefaultRenderer(Object.class, new MyCellRenderer()); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setBounds(10, 195, 641, 198); frame.getContentPane().add(scrollPane); // scrollPane.setViewportView(table); frame.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); frame.setVisible(true);
un des deux threads créés appelle une méthode statique de la classe Fenetre_2 qui finit par cette ligne :
où al_atraiter est une instance de la classe Liste_rdv_minimum, cad un modèle de la JTable; noter que al_atraiter contient 3 RDV, elle n'est donc pas vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part al_atraiter.fireTableDataChanged();
est-ce un problème d'EDT?(l'appel de la méthode statique de Fenetre_2 doit-il se faire avec un invokeLater?)
merci pour toute aide, posez vos questions si vous avez besoin de renseignements sur mon code.
merci
olivier
Partager