Bonjour,
Je possède dans mon application une JTable sur laquelle j'utilise le tri via TableRowSorter.
Lorsque je supprime une de mes lignes sans trier, tout fonctionne parfaitement, cela supprime la ligne dans l'affichage et supprime l'élément dans la base de données.
Lorsque je supprime une de mes lignes en utilisant le tri, ce n'est pas le bon élément qui est supprimé dans l'affichage mais c'est le bon élément qui est supprimé dans ma base de données.
Donc si je ferme et rouvre ma JTable le problème n'est plus là, je pourrais faire un simple rafraîchissement en somme mais je ne trouve pas ça propre.
(J'ai cru comprendre que ça venait du fait que lors de la suppression, la taille de mon tableau reste le même avec un élément en moins et le tri s'effectue donc encore sur la taille totale.)
Merci par avance pour votre aide !
Voici le code :
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 super(); setTitle("Liste des clients"); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); modele = new ListeClientsModele(); cDAO = new ClientDAO(); tableClients = new JTable(modele); tableClients.getColumnModel().getColumn(0).setMinWidth(0); tableClients.getColumnModel().getColumn(0).setMaxWidth(0); getContentPane().add(new JScrollPane(tableClients)); tableClients.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent click) { if(click.getClickCount()==1 && click.getButton()==click.BUTTON3) { ligne = tableClients.rowAtPoint(click.getPoint()); id = (int) tableClients.getValueAt(ligne, 0); popupMenu.show(tableClients, click.getX(),click.getY()); } } }); TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableClients.getModel()); tableClients.setRowSorter(sorter); sorter.setSortsOnUpdates(true);
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 popupMenu = new JPopupMenu(); item = new JMenuItem("Supprimer"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { if(aDesReservEnCours(id) == false) { cDAO.delete(id); afficherMessage("Suppression effectuée avec succès"); modele.removeClient(ligne); } else { afficherMessage("Le client a des réservations en cours"); } } catch(Exception e) { afficherMessage("Erreur dans la suppression du client."); } } }); popupMenu.add(item);
Partager