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

AWT/Swing Java Discussion :

Défaut graphique affichage JTable


Sujet :

AWT/Swing Java

  1. #1
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Points : 1 577
    Points
    1 577
    Par défaut Défaut graphique affichage JTable
    Bonjour,

    voyez ce phénomène graphique que je n'arrive pas à résoudre:

    Nom : JDialog-JTable.jpg
Affichages : 203
Taille : 225,4 Ko

    Le conteneur est une JDialog, ayant comme seul contenu une JTable. Les données de celles-ci sont gérées par une classe étendant AbstractTableModel.
    Le phénomène graphique est obtenu en glissant la fenêtre en dehors de l'écran, puis en la faisant revenir lentement à l'intérieur de l'écran.
    Si le glissement de retour en zone d'affichage est rapide, quelque zones de la JTable sont rafraîchies.
    Par contre, si le glissement est très lent, j'arrive à faire revenir une JTable entièrement vide.

    En déboguant, je m'aperçois que que la fonction surchargée AbstractTableModel.getValue() n'est pas systématiquement invoquée.
    Le membre JTable.doubleBufferred à 'true' ou à 'false' ne change rien à l'affaire.
    La propriété JDialog.isDoubleBuffered est toujours à 'false' et je ne trouve pas comment la changer... et d'ailleurs, je ne sais pas si ce serai la solution au problème...

    Vous avez une idée sur la résolution de ce dysfonctionnement ?


    PS: le défaut apparaît lorsqu'il s'agit d'un glissement vers le haut ou le bas de l'écran.
    Par contre, dans les cas de glissement horizontal , le rafraîchissement graphique se fait correctement... C'est un indice

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 330
    Points : 444
    Points
    444
    Par défaut
    Bonjour,

    J'ai déjà eu des problèmes semblables mais avec des mauvaises surcharges de "paint" (et companie), jamais avec un composant standard :

    1. Avez-vous des CellRenderer customs ? Si oui, est-ce que le problèlme se produit sans eux ?
    2. Avez-vous essayer de placer la JTable dans un JScrollPane, les deux travaillent souvent ensemble et peut-être que l'un compte un peu trop sur l'autre..

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Points : 1 577
    Points
    1 577
    Par défaut
    Merci pour ce retour,

    effectivement, j'ai un CellRenderer spécifique attaché à la JTable. Avec ou sans... le phénomène est présent.

    Par contre, le fait de mettre la JTable dans un JScrollPane fait disparaître l'anomalie.

    En résumé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JDialog maJDialogue.getContentPane().add( maJTable );
    = Problème...


    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JDialog maJDialogue.getContentPane().add( new JScrollPane( maJTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ));
    = Fonctionnement OK

    Belle piste... mais mettre la JTable dans un JScrollPane ne m'arrange pas.
    Néanmoins on peut en déduire que ce composant détecte les besoins de rafraîchissement graphique, alors que le ContentPane de la JDialog ne les détecte que partiellement.
    Je continue les expérimentations dans ce sens...

  4. #4
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 330
    Points : 444
    Points
    444
    Par défaut
    Super, c'est déjà une progression.

    Est-ce que mettre la JTable comme content pane (au lieu de l'y ajouter) change quelque chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maJDialogue.setContentPane( maJTable );

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Points : 1 577
    Points
    1 577
    Par défaut
    Bonjour,

    ben en fait, je n'ai pas tout dit.
    Le conteneur JDialog fonctionne avec un BorderLayout.
    Dans la partie 'NORD', j'y mets l'en-tête de la JTable, et dans la partie centrale, j'y mets la JTable.
    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Container contentPane = this.getContentPane();
    contentPane.add( maJTable.getTableHeader(), BorderLayout.NORTH );
    contentPane.add( maJTable, BorderLayout.CENTER );
    Bizarrement, l'en-tête de la JTable n'a aucun problème de rafraîchissement, contrairement à la JTable elle-même.

    Pour le moment, j'ai contourné le problème sur la base de ce que l'on a découvert avec le JScrollPane:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    contentPane.add(
      new JScrollPane( maJTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ),
      BorderLayout.CENTER ); // Pour bénéficier d'un rafraîchissement graphique fonctionnel
    Ainsi le tableau est contenu dans un JScrollPane sans glissière. Mais cela n'explique pas la raison du problème

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

Discussions similaires

  1. [Turbo Pascal] [TP7] Défauts d'affichage en mode graphique
    Par wiwaxia dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/12/2010, 15h12
  2. Problème affichage JTable
    Par matt8-5 dans le forum Composants
    Réponses: 3
    Dernier message: 03/04/2007, 19h25
  3. Réponses: 14
    Dernier message: 07/06/2006, 10h28
  4. Actualiser l'affichage jtable
    Par Blast dans le forum Composants
    Réponses: 6
    Dernier message: 21/04/2006, 18h45
  5. [Graphique] affichage d'arbres n-aires
    Par jeepnc dans le forum Graphisme
    Réponses: 2
    Dernier message: 21/03/2006, 22h27

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