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 :

[Swing]JTable- Dimensionner les colonnes [FAQ]


Sujet :

Composants Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [Swing]JTable- Dimensionner les colonnes
    Comment faire pour dimensionner les colonnes de la JTable à la taille du contenu.


    Est-on obliger de faire ca à la main? Si oui comment faut fiare?



    Merci de votre aide


    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Salut,

    Pour dimensionner la taille des colonnes, la procédure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Mis en forme des tailles des colonnes de la JTable
    TableColumn column = null;
    for (int i = 0; i < 7; i++) {
    	column = _tblConges.getColumnModel().getColumn(i);
    	column.sizeWidthToFit();
    }
    Je n'ai pas testé la méthode sizeWidthToFit(), mais si ça ne va pas, tu peux toujours calculer la largeur du texte à afficher, et dans ce cas remplacer sizeWidthToFit() par setPreferredSize(largeur).

    Voilou,

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    La methode sizeToFit ne marche pas, on est donc obliger de calculer la taille max de la colonne nous meme?

    Si oui, comment on calcul la taille max de la colonne?

    Bonne soirée

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    C'est bien ce que je redoutais...
    Pour calculer la largeur, je n'ai pas d'idée vraiment précise, mais je pense que je récupèrerais le JLabel correspond au texte affiché dans la table (parce que ce sont les JLabels qui sont affichés il me semble), et je tenterais de récupérer la longueur de ce label avec un getPreferredWidth().

    Quelque chose dans le genre...

    Autre piste, avec le compte du nombre de lettres dans le texte que tu as à afficher...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui mais pour compter le nombre de lettre du contenu c'est pas évident. Ma Jtable affiche pas des données figées mais des données récupéré dynamiquement depuis une base de données.
    En fait ma JTable affiche le résultat d'une requete SQL.

    C'est assez chiant cette histoire de redimensionnement!

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut methode barbare
    salut a ts,

    bah c'est une methode un peu barbare parce qu'elle oblige de parcourir ttes les cellules du tablo, mais ca fonctionne ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
         /**
         * redefine size of table columns
         */
        public void setColumnSize(){   
            FontMetrics fm = table.getFontMetrics(table.getFont());
            for (int i = 0 ; i < table.getColumnCount() ; i++)
            {
                int max = 0;
                for (int j = 0 ; j < table.getRowCount() ; j++)
                {
                   int taille = fm.stringWidth((String)table.getValueAt(j,i));
                   if (taille > max)
                        max = taille;
                }
                String nom = (String)table.getColumnModel().getColumn(i).getIdentifier();
                int taille = fm.stringWidth(nom);
                if (taille > max)
                       max = taille;
               table.getColumnModel().getColumn(i).setPreferredWidth(max+10);
            }
        }
    Si qqn a mieux a proposer, je suis preneur !

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci a tous pour votre aide précieuse mais c'est bien ce que je pensais il faut se taper toutes les cellules pour toutes les colonnes pour pouvoir faire un dimensionnement des colonnes relatif au contenu.

    Etant donné que j'ai une JTable qui est grande (en moyenne 20 colonnes et 4000 enregistrements), cette méthode va etre tres lourde!

    Mais je vais essayer pour voir ce que ca donne.

    Toutefois si quelqu'un a une meilleure solution, je suis preneur aussi.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    J'ai un peu le même pb mais moi je voudrais récupérer la taille (et non la longueur que j'aurais avec lenght ou size) du texte contenu dans l'entete de mes colonnes. Comment faire pour calculer la longueur physique d'un texte ?

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par P4_le_requin_breton
    J'ai un peu le même pb mais moi je voudrais récupérer la taille (et non la longueur que j'aurais avec lenght ou size) du texte contenu dans l'entete de mes colonnes. Comment faire pour calculer la longueur physique d'un texte ? :?
    bah, ds ce que je t'ai donne, la ligne
    FontMetrics fm = table.getFontMetrics(table.getFont())
    te permet de recuperer la taille reelle des caracteres suivant la Font que tu utilises

    ensuite, tu utilises
    int taille = fm.stringWidth((String)table.getValueAt(j,i));
    pr recuperer la taille reelle en pixel de ta chaine de caractere.


    Citation Envoyé par loutfi
    Etant donné que j'ai une JTable qui est grande (en moyenne 20 colonnes et 4000 enregistrements), cette méthode va etre tres lourde!
    bah je doute que tu affiches les 4000 lignes d'un seul coup, parce que meme sans redimensionner les colonnes, ca doit etre assez long. pr un pb un peu similaire, j'ai bidouille un systeme fonctionnant avec des pages.
    en gros, mon tablo est divise en page de n resultats et je redimensionne par rapport a ses n resultats a chaque affichage. Ce qui ne prends pas bcp de temps... Mais la question que je me pose, cest pkoi column.sizeWidthToFit(); fonctionne pas ?

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par malrin
    Mais la question que je me pose, cest pkoi column.sizeWidthToFit(); fonctionne pas ?
    Je viens de réessayer et cette méthode n'a aucun effet pour moi.
    Elle ne resize la colonne ni à la taille du contenu ni à la taille de l'entete. En gros je ne remarque aucun changement avec ou sans l'utilisation de cette méthode.

    Si quelqu'un arrive à faire marcher cette méthode je suis interessé.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Effectivement cette méthode à le même effet chez moi, cad aucun !
    Merci malrin, çà marche nickel ton code pour les entetes !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Merci Marlin !

  13. #13
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 51
    Points
    51
    Par défaut
    Cette méthode fait un resize mais que sur le header, donc pas sur le contenu...

    Après je vais essayer cette piste : dans les renderer des jlabel de la colonne faire en sorte que leur taille minimale corresponde au contenu et forcer la jtable à s'élargir.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/07/2011, 16h22
  2. [Swing / JTable] Rendre les cellules d'un JTable non éditables
    Par Jérôme_20 dans le forum Composants
    Réponses: 20
    Dernier message: 10/02/2011, 10h32
  3. [swing]jtable, desactiver une colonne
    Par isoman dans le forum Composants
    Réponses: 7
    Dernier message: 11/05/2009, 13h46
  4. [Swing][JTable]Tailles des colonnes du tableau
    Par LordBlaize dans le forum Composants
    Réponses: 6
    Dernier message: 20/02/2006, 17h46
  5. [JTable] Changer les colonnes de manière dynamique
    Par gg2laba dans le forum Composants
    Réponses: 3
    Dernier message: 03/10/2005, 23h39

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