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 :

Largeur de colonne de JTable = chaque largeur de libellé de colonne


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut Largeur de colonne de JTable = chaque largeur de libellé de colonne
    Bonjour,
    Je cherche à réaliser une JTable dont les colonnes s'ajustent en largeur suivant la largeur des libellés de ses colonnes.
    int largeurEnteteCol = table.getTableHeader().getColumnModel().getColumn(col).getWidth();

    - Avec .getColumn(col).getWidth(); j'obtiens des colonnes toutes de largeur identiques, parfois trop larges et parfois trop étroites, probablement de largeur prédéfinie PREFERRED_SIZE ou DEFAULT_SIZE.Nom : getWidth().png
Affichages : 278
Taille : 7,0 Ko

    - Avec .getColumn(col).getHeaderValue()).length(); j'obtiens des colonnes toutes confinées à la largeur minimale de colonne.Nom : getHeaderValue()).length().png
Affichages : 245
Taille : 4,8 Ko

    - Ce que je recherche est que la largeur de chaque colonne soit tributaire de la largeur de son libellé, plus un petit chouïa, telle que sur la photo #3.Nom : LargeurLibelléColonne.png
Affichages : 264
Taille : 6,5 Ko

    Qu'aurais-je dû coder ?
    Merci d'essayer de me renseigner.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu peux utiliser ce genre de code, pour chaque colonne i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                TableColumnModel columnModel = table.getColumnModel();
                TableColumn column = columnModel.getColumn(i);
                TableCellRenderer headerRenderer = column.getHeaderRenderer();
                if (headerRenderer == null) {
                    headerRenderer = table.getTableHeader().getDefaultRenderer();
                }
                Object headerValue = column.getHeaderValue();
                Component headerComp = headerRenderer.getTableCellRendererComponent(table, headerValue, false, false, 0, col);
                int width = headerComp.getPreferredSize().width;
                column.setPreferredWidth(width + 6); // rajoute la place pour l'espacement
    code venant de http://stackoverflow.com/questions/1...xt-in-a-header

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut
    Bonjour Tchize et tous.
    Merci pour ta réponse. C'est tout-à fait cela.Nom : LargeurLibelléColonne.png
Affichages : 244
Taille : 6,4 Ko

    Revoici le code, auquel est ajouté ce qu'il faut pour que la largeur de chaque colonne tienne en plus compte de la largeur du contenu de toutes les cellules de chaque colonne.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
     
            for (int col = 0; col < table.getColumnCount(); col++)
            {
                // Cette douzaine de lignes rien que pour trouver la largeur des intitulés de chaque colonne ...
                TableColumnModel columnModel = table.getColumnModel();
                TableColumn colonneDeTable = columnModel.getColumn(col);
                int largeurColPrefer = colonneDeTable.getMinWidth();
                int largeurMaxCol = colonneDeTable.getMaxWidth();
                TableCellRenderer RenduDEntete = colonneDeTable.getHeaderRenderer();
                if (RenduDEntete == null)
                    RenduDEntete = table.getTableHeader().getDefaultRenderer();
                Object contenuDEntete = colonneDeTable.getHeaderValue();
                Component composDeRenduDEntete = RenduDEntete.getTableCellRendererComponent(table, contenuDEntete, false, false, 0, col);
                int largeurEnteteCol = composDeRenduDEntete.getPreferredSize().width + 12;
                colonneDeTable.setPreferredWidth(largeurEnteteCol);
     
                largeurColPrefer = Math.max(largeurColPrefer, largeurEnteteCol);
     
                for (int ligne = 0; ligne < table.getRowCount(); ligne++)
                {
                    TableCellRenderer rendeurDeCellule = table.getCellRenderer(ligne, col);
                    Component compos = table.prepareRenderer(rendeurDeCellule, ligne, col);
                    int largeurCol = compos.getPreferredSize().width + table.getIntercellSpacing().width;
                    largeurColPrefer = Math.max(largeurColPrefer, largeurCol);
     
                    // Si la largeur maximum a été dépassée, plus besoin d'examiner les autres lignes.
                    if (largeurColPréfér >= largeurMaxCol)
                    {  largeurColPrefer = largeurMaxCol;
                        break;
                    }
                }
                colonneDeTable.setPreferredWidth(largeurColPréfér);
            }
    ... pour ceux que cela pourrait intéresser.
    Encore merci.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

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

Discussions similaires

  1. [HTML 4.0] Tableau avec premières colonnes à 100% de la largeur du navigateur
    Par mmvik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 16/07/2010, 10h10
  2. Réponses: 4
    Dernier message: 24/05/2010, 14h09
  3. [SWT] Deux colonnes prenant toute la largeur
    Par Altrensa dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 25/03/2010, 10h33
  4. Largeur des colonnes de JTable
    Par Lamy20 dans le forum Composants
    Réponses: 10
    Dernier message: 09/09/2009, 19h17
  5. [JTable] Problème largeur de colonne
    Par donnadieujulien dans le forum Composants
    Réponses: 8
    Dernier message: 24/04/2008, 17h04

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