Actualisation JTable Java
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:
Code:
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;
} |
Cela fonctionne, lors de mon premier appel, j'ai bien l'affichage de toutes les données voulues.
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:
Code:
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);
}
}); |
et la methode affichOperation:
Code:
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"));
} |
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.
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.