IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Problème JTable supression depuis source de données


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut Problème JTable supression depuis source de données
    Bonjour,

    J'ignore si ce problème a déjà été exposé. J'ai parcouru les 10 premières pages de topics sans trouver de sujet similaire.

    Voici mon problème: j'ai une exception lorsque je veux supprimer une ligne de ma table:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.removeElementAt(Unknown Source)
    at javax.swing.table.DefaultTableModel.removeRow(Unknown Source)

    Alors voila comment mon modèle fonctionne:
    1 - Les données de ma JTable sont fournies depuis un objet tierce (qui charge un fichier XML, enfin peu importe) et fournit des méthodes du style getOperationCount(), getOperationLabel(int index)... Donc, j'ai défini une classe qui hérite de DefaultTableModel et qui se base sur les méthodes fournies par I pour surcharger les méthodes getRowCount(), getValueAt(..), etc...

    2 - Lorsque je souhaite supprimer une entrée dans la table, j'appelle directement la méthode I.removeOperation(index) et comme mon TableModel se base sur I pour définir le contenu, à priori la suppression devrait être effective sur la JTable.

    Malgré ça, ça ne fonctionne pas. J'ai donc tenté quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // depuis ma class héritant de DefaultTableModel
    public void removeRow(final int row)
    {
       super.removeRow(row);
       I.removeOperation(row);
       fireTableRowsDeleted(row,row);
    }
    J'ai essayé d'inverser les removeRow et removeOperation mais ça ne change rien. J'ai également vu d'autres topics qui disaient que le DefaultTableModel utilise un Vector et qu'il y a un souci lorsque les colonnes sont ajoutées à la JTable plutôt qu'au modèle. Dans mon cas je n'ajoute rien explicitement, je surchage les méthodes getColumnCount() et getColumnName(int column).

    Quelqu'un a une idée ? Merci.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    vire le super.removeRow() vu que tu n'utilises pas le vector du DefaultTableModel pour stocker tes données...

    D'ailleurs, il serait préférable que tu hérites d'AbstractTableModel plus que du DefaultTableModel dont tu n'utilises pas grand chose au final.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Ok, merci, voila qui est fait. J'ai supprimé le super.removeRow() et j'ai changé le DefaultTableModel par un AbstractTableModel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void removeRow(final int row)
    {
       I.removeOperation(row);
       fireTableRowsDeleted(row,row);
    }
    Je n'ai effectivement plus d'exception. L'opération est bien supprimée de la source de données I. Malheureusement, la ligne n'est pas supprimée de la JTable.

    J'ai tenté plusieurs événements, fireTableDataChanged()... mais rien ne se passe.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Bon j'ai trouvé ce qui n'allait pas... Une connerie de ma part: j'utilisais un cache dans mon objet tierce. Je supprimais bien la donnée du fichier mais sans la supprimer du cache...

    Mille excuses pour le dérangement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'accès aux sources de donnée avec JSP
    Par zied_m dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 15/12/2014, 11h09
  2. Réponses: 0
    Dernier message: 02/05/2014, 14h55
  3. [2008R2] Problème de connexion à une source de données Analysis services
    Par omar.oukili dans le forum SSRS
    Réponses: 2
    Dernier message: 23/07/2013, 17h48
  4. Réponses: 0
    Dernier message: 20/07/2010, 20h35
  5. jdbc : problème de connexion à une source de données
    Par hanafimohammed dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/06/2009, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo