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 :

Actualisation de JTable et RowSorter


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Par défaut Actualisation de JTable et RowSorter
    Bonjour,
    eh oui, encore un pépin avec mes JTables
    Cette fois, j'ai isolé l'erreur tout seul (j'y ai passé la journée entière).
    En fait, j'ai un model pour ma JTable contenant entre autre la fonction update.
    Cette fonction update récupère des informations dans une bdd, et ensuite actualise la liste utilisée par getValuAt.
    Cela marchait très bien avant qu'il y ai un tri.
    Quand il y avait une ligne en moins, elle disparaissait et il n'y avait aucun pb dans ma JTable.
    Je vous passe les détails, toujours est-il que j'ai fini par trouvé la source de multiples bugs ... En fait, getValuAt était appelé pour une ligne qui n'existe plus

    voici la preuve :
    code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Object getValueAt(int row, int col) {
    		// ...
    		System.out.println("Index de ligne demandée : "+row+" et taille du model = "+ls.size());
    // ...
    et résultat après utilisation :

    Index de ligne demandée : 6 et taille du model = 2

    et puisque que le bug disparait quand je vire le sorter, j'en déduis que c'est le sorter qui s'imagine qu'il existe encore 6lignes alors qu'il n'y en à plus que 2 ...

    J'ai bien remarqué la méthode setModel de la classe rowSorter, mais n'y a-t-il pas plus léger ?
    voici le code pour le rowSorter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    t=JModelScreenActivity.create(this, Connect.getProcessor().popListActivities(m), m);
     
    		TableRowSorter<JModelScreenActivity> sorter = new TableRowSorter<JModelScreenActivity>((JModelScreenActivity) t.getModel());
     
     
    		t.setRowSorter(sorter);
    Voilà, quelle est la meilleure solution à adopter pour ce cas ?
    peut-être faut-il procéder autrement à la création du rowSorter ?
    ou sinon il faudrait "actualiser" le rowSorter, mais ne connaissant pas trop les principes ...
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Dans ta méthode update() est-ce que tu notifies bien les listeners du model du changement de données (méthode fireTableDataChanged() si ton model hérite de l'AbstractTableModel) ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éclairé
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Par défaut
    non .. je fait juste un setModel ...
    c'est vrai, j'aurai du penser à regarder du côté des évènement fire
    j'avais bien compris que le problème venais d'un non-actualisation du sorter, et je m'apprêtais à faire un setModel et sur le model et sur le sorter
    merci, je vais essayer avec fireTableDataChanged()
    le pire c'est que je connaissait cette méthode, mais je n'ai pas été foutu d'y repenser au bon moment ... enfin, il faut dire que je croyais que ça ne pouvais s'utiliser que dans des CellEditor, et il ne m'est pas venu à l'idée de l'utiliser dans le JModel en personne
    merci, j'essaye tout de suite.

  4. #4
    Membre éclairé
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Par défaut
    ça marche impeccable ...
    un seul pb, avant, quand la table se mettait à jour, et si l'utilisateur était en train d'éditer un cellule, le tableau se mettait à jour sans que cela nuise à la ligne que l'on éditait.

    Mais là, quand on est en train d'éditer la case, crac, tout est en l'air
    Donc je crois que je vais utiliser une variable de classe statique qui sera mise à jour par mes éditor, et qui indiquera si le tableau est en cours d'édition.
    Si oui, je ne fait pas de fireTableDataChanged(), sinon, je le fais ...

    C'est important, car mon tableau est actualiser toutes les 7 sec, alors on a pas le temps de saisir ce qu'on veux que c'est fichu !

    Quand une ligne demandée n'existe plus, une ligne blanche s'affiche à la place.
    donc si le tableau est en cours d'édition et que le tableau s'actualise, une ligne blanche apparaît simplement à la place des lignes disparues ... ce qui ne devrait pas arriver souvent car quand une ligne disparaît, c'est généralement suite à un clic sur un bouton du tableau ... l'utulisateur aurai difficilement le temps de cliquer sur ce bouton puis d'éditer une cellule avant que l’actualisation ce fasse

    merci beaucoup !

    EDIT

    j'ai décris tout ces détails au cas ou vous verriez une solution plus simple

  5. #5
    Membre éclairé
    Homme Profil pro
    Première S
    Inscrit en
    Juillet 2010
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Première S

    Informations forums :
    Inscription : Juillet 2010
    Messages : 266
    Par défaut
    aïe, j'ai un fameux pépin ...
    en fait, il arrive que le tri d'un même model soit aléatoire, si par exemple une colonne a plusieurs valeurs égales et que le tri a été fait sur cette colonne.
    Dans ce cas, les lignes changent de place ... et ça ne va pas du tout, si les lignes changent de place toutes les 5 secondes ...

    Là je ne sait vraiment pas que faire, sinon faire un condition à l'actualisation, pour actualiser le sorter en cas de différence entre l'ancien nb de ligne et le nouveau nb de lignes ...

    de plus, à l'actualisation, le focus est perdu lui aussi, il va falloir récupérer la ligne sélectionnée et la resélectionner après la mise à jour ...

    bref, tout ça ça devient lourd ... si vous voyez une meilleure solution ...
    merci.

Discussions similaires

  1. Actualiser un JTable au remplissage d'une ArrayList
    Par teribilis dans le forum Composants
    Réponses: 0
    Dernier message: 02/12/2012, 16h08
  2. JtextArea actualiser depuis JTable
    Par tanguy.L dans le forum Composants
    Réponses: 2
    Dernier message: 22/06/2009, 11h36
  3. Actualiser un JTable
    Par sarah_insat dans le forum Composants
    Réponses: 7
    Dernier message: 28/03/2008, 15h54
  4. Actualiser une JTable
    Par X-plode dans le forum Composants
    Réponses: 4
    Dernier message: 23/04/2007, 11h10
  5. Actualiser une JTable
    Par jojo57 dans le forum Composants
    Réponses: 2
    Dernier message: 06/12/2006, 17h42

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