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

Agents de placement/Fenêtres Java Discussion :

Affichage JTable tronquée


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut Affichage JTable tronquée
    Bonjour à tous,

    Il m'arrive un problème que je n'avais jamais rencontré et j'ai beau le prendre dans tous les sens, impossible de m'en sortir. Ma dernière solution et donc de m'adresser à vous.

    Sur un écran, je dois afficher plusieurs JTable les unes en dessous des autres avec une largeur fixe mais une hauteur variable selon le nombre de ligne dans la table (en gros, ascenseur horizontal mais pas de vertical). J'ai donc fait une boucle qui m'affiche mes JTable, je calcule le nombre de lignes et fixe les MinimumSize et MaximumSize du JScrollPane qui la contient à une largeur fixe et la hauteur calculé. Toutes mes JTable s'inserre bien dans mon écran et tout fonctionnait bien lors de mes tests...jusqu'au dernier test.

    Dans ce dernier test, j'ai beaucoup plus de ligne à afficher (~70 lignes contre maximum 10 dans mes premiers tests). Et là ça ne fonctionne plus très bien, seules les premières lignes de la JTable sont visibles et elle est coupé au milieu d'une ligne et le reste est impossible à voir, par contre en dessous j'ai un gros espace vide (qui correspond à la taille réelle de la JTable. J'ai essayer d'afficher la taille de la JTable et ce sont les bonnes valeurs. Je ne comprend vraiment pas pourquoi l'affichage est tronqué en plein milieu.

    Si vous pouviez m'aider ça serait super.

    Merci.

  2. #2
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    tu peux fournir du code qui montre le problème?

  3. #3
    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
    Pour faire simple, tu mets toutes tes JTables dans des JPanel (avec le Header au dessus) sans les mettre dans un JScrollPane. puis tu ajoutes tous les JPanels dans un JPanel puis ce JPanel dans un JScrollPane.

  4. #4
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    Je ne peux pas vraiment donner de code car c'est un très gros projet et pleins de classes ont été créées et le code ne servirait à rien car le noms des différentes classes ne vous dirai rien...
    Je viens de faire un nouveau test, et ça va peut-être vous aider, j'ai un composant créé qui est une JTable à l'intérieure d'un JScrollPane (pour éviter de faire la manip à chaque fois j'ai créer ce composant) si je l'affiche sur mon écran, le composant à une taille mais j'aimerais que la hauteur s'adapte au nombre de lignes ainsi s'il y a beaucoup de ligne, j'aurai un long tableau mais sans ascenseur et s'il y a très peu de ligne, je pourrais le raccourcir pour ne pas avoir un vide qui correspond au JScrollPane qui est plus grand que la table.
    J'ai donc mis setMaximumSize et setMinumumSize au valeur qu'il faut et si c'est un grand tableau, le composant se place bien plus haut dans le containeur car il va occuper plus de place mais seul la partie de la haute est visible et la taille de cette partie est celle qu'avait le composant lorsque je ne précisait pas de taille.

    Citation Envoyé par sinok Voir le message
    Pour faire simple, tu mets toutes tes JTables dans des JPanel (avec le Header au dessus) sans les mettre dans un JScrollPane. puis tu ajoutes tous les JPanels dans un JPanel puis ce JPanel dans un JScrollPane.
    Le problème c'est que (comme je viens de le dire) j'ai un composant qui est une JTable dans un JScrollPane et je dois absolument utiliser ce composant.

  5. #5
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    J'ai pas du bien saisir ton explication...
    est-ce que tu as une JScrollPane par JTable ?

  6. #6
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    En fait, j'ai créer un composant MaTable qui est une JTable dans un JScrollPane donc oui j'ai bien un JScrollPane par JTable, ensuite le tout est encore dans un JScrollPane car les MaTable sont tous les uns en desous des autres et ça depasse la hauteur de l'écran.

    Pour mieux comprendre j'ai mis deux images. On peut voir mon grand conteneur qui contient les JTables les unes en dessous des autres. Sur l'image 0, j'ai mon MaTable avec des barres de défilements. Je veux supprimer celle horizontale donc j'agrandit mon composant et j'obtient l'image 1. On voit tout de même que le composant à la bonne taille car il y a la barre de défilement sur le grand conteneur.
    Images attachées Images attachées   

  7. #7
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    j'agrandit mon composant
    Quel composant?

  8. #8
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    Le composant que j'ai créé et que j'ai appelé MaTable dans mon exemple juste avant est qui est une Table dans un JScrollPane.

  9. #9
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    tu l'agrandis via un setSize ou un setPreferredScrollableViewportSize ???
    mieux vaut la deuxième solution

  10. #10
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    J'ai essayé beaucoup de chose et je me suis un peu perdu dans tous les ...Size

    Voila ce que j'utilise en ce moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     monObjet.getScrollPane().setMinimumSize(new Dimension(TABLE_WIDTH, height));
    monObjet.getScrollPane().setMaximumSize(new Dimension(TABLE_WIDTH, height));
    Je récupère le ScrollPane de monObjet, de type MaTable et je l'agrandi...c'est peut-être n'importe quoi mais je suis la dessus depuis un moment et je pense qu'il me faut un peu de recul pour trouver la solution, ou de l'aide extérieure.

    Merci.

  11. #11
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    dans la dimension que tu attribues, tu ne prends pas en compte les éventuels ScrollBar qui pourraient être visible si le viewport du JScrollPane ne peut pas afficher l'intégralité du composant table...
    D'autres part, après avoir modifié la taille min et max, peut-être faudrait-il faire un revalidate du composant non?? je suis pas certain.

  12. #12
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    Citation Envoyé par xixi31 Voir le message
    dans la dimension que tu attribues, tu ne prends pas en compte les éventuels ScrollBar qui pourraient être visible si le viewport du JScrollPane ne peut pas afficher l'intégralité du composant table...
    D'autres part, après avoir modifié la taille min et max, peut-être faudrait-il faire un revalidate du composant non?? je suis pas certain.
    Mon but est de ne pas avoir de barre verticale mais d'adapter la hauteur en fonction du nombre de ligne d'où ma variable TABLE_WIDTH et pour la hauteur, j'ai prévu quelque pixel en plus dans mon calcul pour une éventuelle barre...Et en plus il me manque beaucoup plus que la barre de défilement, je vois à peine la moitié de la table.

    J'ai testé revalidate et ça ne change rien...

  13. #13
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    galère ..

    au final, est-ce que les tailles min et max que tu assignes aux JScrollPane sont pris en compte... est-ce que le getSize te retourne quelque chose de correct?

    Le problème ne vient-il pas finalement du panneau qui contient tous tes JScrollPanes?

    Je pense qu'il aurait fallu que tu ne touches pas aux tailles min et max des JScrollPanes mais appeler setPreferredScrollableViewportSize sur chacune de tes tables, puis revalidate sur chacune des JTables ... tu peux faire ce test là?

  14. #14
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    Citation Envoyé par xixi31 Voir le message
    galère ..

    au final, est-ce que les tailles min et max que tu assignes aux JScrollPane sont pris en compte... est-ce que le getSize te retourne quelque chose de correct?

    Le problème ne vient-il pas finalement du panneau qui contient tous tes JScrollPanes?

    Je pense qu'il aurait fallu que tu ne touches pas aux tailles min et max des JScrollPanes mais appeler setPreferredScrollableViewportSize sur chacune de tes tables, puis revalidate sur chacune des JTables ... tu peux faire ce test là?
    Effectivement c'est la galère et quand tu t'obstines comme cela à chercher une solution c'est souvent dur à trouver...
    Je pense reprendre ça lundi et depuis le début.

    Pour ton test, je viens de la faire et c'est comme si je n'avais rien fais, le ScrollPane à sa taille normale et j'ai donc une barre verticale...comme l'image 0 que j'avais envoyé. Et si je fait un Get sur les size, j'ai les bonnes valeurs à n'y rien comprendre puisque l'affichage est différent

  15. #15
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    faudrait vraiment que tu créés un petit test (même si c'est un zip avec plusieurs classes ) qui puisse reproduire ton problème parce que comme ca, c'est un peu chaud...

  16. #16
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    Oui mais c'est presque impossible, il y a plusieurs dizaines de classes derrière tout ça, il y a tout un Framework.
    J'ai demandé ça si quelqu'un avait déjà eu un problème similaire ou si quelqu'un connaissait ce genre d'erreur et pouvait tenter de me répondre directement mais ce n'est pas grave je trouverrais surement lundi à tête reposée.

  17. #17
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    J'ai trouvé la solution, dans ma classe qui regroupait JTable et JScrollPane, j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setPreferredScrollableViewportSize(new Dimension(table_width, height));
    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrollPane = new JScrollPane(table);
    Avant j'essayais de le faire dans une autre classe après avoir construit mon objet JScrollPane+JTable et la table ne devait pas être actualisé.

    En tout cas ça marche, merci de votre aide.

    Je met "Résolu" mais j'ai encore une petite question qui n'a plus grand chose à voir, quelqu'un pourrait-il me réexpliquer rapidement la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setMaximumSize()
    setMinimumSize()
    setPreferredSize()
    Merci.

  18. #18
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    je crois pas que tu ais fait le test qu'il fallait quand je t'ai parlé de setPreferredScrollableViewportSize + revalidate... .

    Bref, tu n'es pas obligé d'appeler setPreferredScrollableViewportSize avant la création du JScrollPane... Il faut juste qu'après l'appel à setPreferredScrollableViewportSize tu appelle la méthode revalidate sur ta JTable.

    http://java.sun.com/docs/books/tutor...ne.html#update

  19. #19
    Membre éprouvé Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Par défaut
    Même avec revalidate ça ne fonctionne pas. Mais j'ai trouvé une solution donc c'est bon par contre il m'arrive un nouveau truc bizarre.

    Je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*" + height);
    table.getTable().setPreferredScrollableViewportSize(new Dimension(table_width, height));
    scrollPane = new JScrollPane(table.getTable());
    La variable height est calculé en fonction du nombre de lignes du tableau pour avoir, encore une fois juste une barre de défilement horizontale mais pas verticale, sa valeur est 2408.
    Malgré cela, ma table s'affiche avec une barre de défilement verticale et mesure 1014 pixel en hauteur. Pourquoi ????

  20. #20
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    désolé mais sans code montrant ton problème, on va galérer

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

Discussions similaires

  1. [AC-2007] etat type contrat trop long : affichage coupé/tronqué/chevauché
    Par enigmatiqk dans le forum IHM
    Réponses: 2
    Dernier message: 27/09/2009, 20h57
  2. probleme Affichage JTable
    Par krikri150489 dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2009, 23h00
  3. Probleme affichage jtable
    Par norkoffire dans le forum Composants
    Réponses: 17
    Dernier message: 13/06/2007, 18h26
  4. Problème affichage JTable
    Par matt8-5 dans le forum Composants
    Réponses: 3
    Dernier message: 03/04/2007, 19h25
  5. Actualiser l'affichage jtable
    Par Blast dans le forum Composants
    Réponses: 6
    Dernier message: 21/04/2006, 18h45

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