Maison > Java > javaDidacticiel > Comment améliorer les performances de l'interface graphique et la table de mise à jour automatique après la suppression de lignes en Java ?

Comment améliorer les performances de l'interface graphique et la table de mise à jour automatique après la suppression de lignes en Java ?

Susan Sarandon
Libérer: 2024-11-19 12:37:02
original
706 Les gens l'ont consulté

How to Improve GUI Performance and Auto-Update Table After Row Deletion in Java?

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

Le problème avec l'interface graphique dans cet exemple semble être lié à l'accès asynchrone à la base de données, ce qui peut provoquer des incohérences dans l'affichage du tableau. Pour résoudre ce problème, le ResultSet doit être récupéré en arrière-plan pour éviter de bloquer le thread de répartition des événements. Les données peuvent être publiées en morceaux et ajoutées au modèle de table de manière incrémentale pour fournir un affichage plus fluide.

Voici une version modifiée du code utilisant un SwingWorker pour récupérer et traiter les résultats en arrière-plan :

public class Gui2 extends JFrame {
    // ...

    public Gui2(Connection conn) {
        // ...

        SwingWorker<List<Row>, Integer> worker = new SwingWorker<List<Row>, Integer>() {
            @Override
            protected List<Row> doInBackground() throws Exception {
                try {
                    while (rs.next()) {
                        Row row = new Row();
                        row.ID = rs.getInt(1);
                        row.name = rs.getString(2);
                        publish(row);
                    }
                } catch (SQLException e) {
                    e.printStackTrace(System.err);
                }
                return null;
            }

            @Override
            protected void process(List<Row> chunks) {
                int n = getRowCount();
                for (Row row : chunks) {
                    tableData.add(row);
                }
                fireTableRowsInserted(n, n + chunks.size());
            }
        };
        worker.execute();
        
        // ...
    }
}
Copier après la connexion

Le travailleur récupérera les lignes en arrière-plan et les publiera en morceaux. La méthode process() ajoutera les lignes au TableModel et mettra à jour l'affichage du tableau de manière incrémentielle.

Mise à jour automatique de la table après la suppression d'une ligne

Pour mettre à jour automatiquement la table après une La ligne est supprimée, l'opération de suppression doit être effectuée dans le TableModel au lieu de l'interface graphique. Le TableModel doit avoir une méthode delete() qui supprime la ligne des données sous-jacentes et déclenche un événement de suppression de lignes de table pour informer le composant de table du changement. Voici une version modifiée de la méthode delete() :

public class TableModel extends AbstractTableModel {
    // ...

    public void delete(int rowIndex) {
        // ...
        try {
            PreparedStatement pre = conn.prepareStatement(query);

            pre.executeUpdate();

            // Remove the row from the data
            tableData.remove(rowIndex);

            // Fire table rows deleted event
            fireTableRowsDeleted(rowIndex, rowIndex);

            JOptionPane.showMessageDialog(null, "Row Deleted Successfully");
        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, e1.getMessage());
        }
    }
}
Copier après la connexion

Avec ces modifications, le tableau sera automatiquement mis à jour après la suppression d'une ligne, offrant ainsi une interface plus conviviale et plus réactive.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal