Maison >Java >javaDidacticiel >Pourquoi ma JTable ne se met-elle pas à jour après la suppression d'une ligne de la base de données ?

Pourquoi ma JTable ne se met-elle pas à jour après la suppression d'une ligne de la base de données ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-16 11:48:03664parcourir

Why Doesn't My JTable Update After Deleting a Row from the Database?

Problème d'affichage de l'interface graphique AbstractTableModel

Le problème auquel vous êtes confronté est lié à la façon dont vous mettez à jour le modèle de table lorsqu'une ligne est supprimée. Actuellement, votre écouteur d'action de bouton deleteSelectedRow met à jour les données dans la base de données mais ne déclenche pas l'actualisation du modèle de table. C'est pourquoi le tableau affiche toujours la ligne supprimée.

Comment résoudre le problème ?

Pour résoudre ce problème, vous devez notifier explicitement le modèle de tableau que les données ont changé. Vous pouvez le faire en appelant la méthode fireTableRowsDeleted() de l'interface TableModel chaque fois qu'une ligne est supprimée de la base de données. Cela déclenchera la mise à jour par le modèle de table de ses structures de données internes et l'actualisation de la table.

Voici une version mise à jour de votre code qui inclut les modifications nécessaires :

delete.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        int rowIndex = table.getSelectedRow();

        Object columnIndexValue = table.getModel().getValueAt(rowIndex, 0);

        String columnName = table.getModel().getColumnName(0);

        String query = "delete from world.city" + " where " + columnName + "=" + columnIndexValue;

        try {

            PreparedStatement pre = conn.prepareStatement(query);

            pre.executeUpdate();

            JOptionPane.showMessageDialog(null, "Row Deleted Successfully");
            
            // Notify the table model that the data has changed
            ((TableModel) table.getModel()).fireTableRowsDeleted(rowIndex, rowIndex);

        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, e1.getMessage());
        }

    }

});

En appelant fireTableRowsDeleted() , vous demandez au modèle de table de supprimer la ligne spécifiée de ses structures de données internes et de mettre à jour la table en conséquence. Cela garantira que l'interface graphique reflète les modifications apportées à la base de données sous-jacente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn