Bonjour,
Après plusieurs recherches et tests perso, je n'ai pas réussis à trouver la solution, malgré le nombre important de sujets correspondant à mon problème.
Ma situation:
Je charge depuis une BD des "Opérations", que je met ensuite dans une collection d'Opération.
Ensuite, je crée le modèle d'un JTable à l'aide de ma collection, de cette façon:
Cela fonctionne, lors de mon premier appel, j'ai bien l'affichage de toutes les données voulues.
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 public DefaultTableModel modele(ArrayList<Operation> listeOperations){ String[] colonnes = {"Numero", "type", "Libell\u00E9", "Montant", "Date", "Categorie", "V\u00E9rifi\u00E9","Numero Chèque"}; //Les colonnes de la jTable Object[][] donnees=new Object [listeOperations.size()][colonnes.length]; //Les données de la jTable for(int i=0;i<listeOperations.size();i++){ for(int j=0;j<=colonnes.length-1;j++){ switch (j) { // recup de toutes les données de listeOperations dans le jtable } } } DefaultTableModel m1=new DefaultTableModel(donnees,colonnes) { @SuppressWarnings("rawtypes") Class[] columnTypes = new Class[] { Integer.class, String.class, String.class, Double.class, Object.class, String.class, Boolean.class, Integer.class }; @SuppressWarnings({ "unchecked", "rawtypes" }) public Class getColumnClass(int columnIndex) { return columnTypes[columnIndex]; } boolean[] columnEditables = new boolean[] { false, false, true, true, true, false, true, false }; public boolean isCellEditable(int row, int column) { return columnEditables[column]; } }; return m1; }
Ensuite, je désire, en fonction du clic de deux boutons, afficher uniquement les Opérations de type "CB" (carte bancaire) ou de type "CH".
Ainsi, le clic sur le bouton Carte Bancaire entraîne l'action suivante:
et la methode affichOperation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 JButton btnCarte = new JButton("Carte"); btnCarte.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String cond=" and type!='CH'"; affichOperation(cond); } });
A priori, cette dernière méthode devrait changer le modèle avec les bonnes données, ce qui se passe exactement au niveau system (l'affichage de la taille avant et après le clic sur ce bouton évolue) mais aucun changement ne se fait au niveau visuel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public void affichOperation(String cond){ maDao = new DaoOperationMySql(); ArrayList<Operation> listeOperations = maDao.getAll(cond); System.out.println(listeOperations.size()); DefaultTableModel m1=modele(listeOperations); table= new JTable(m1); table.setBounds(10, 32, 653, 350); table.getColumnModel().getColumn(1).setPreferredWidth(58); table.getColumnModel().getColumn(2).setPreferredWidth(147); table.getColumnModel().getColumn(5).setPreferredWidth(89); table.setBorder(UIManager.getBorder("FormattedTextField.border")); }
J'ai testé les différents revalidate(), repain() sur le jtable, ainsi que fireTableDataChanged() sur son modèle, mais pas de changement :/
Vous avez des idées?
Merci.
Partager