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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    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 : 302
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 : 269
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 : 284
Taille : 6,5 Ko

    Qu'aurais-je dû coder ?
    Merci d'essayer de me renseigner.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    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 éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut
    Bonjour Tchize et tous.
    Merci pour ta réponse. C'est tout-à fait cela.Nom : LargeurLibelléColonne.png
Affichages : 266
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.

+ 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, 11h10
  2. Réponses: 4
    Dernier message: 24/05/2010, 15h09
  3. [SWT] Deux colonnes prenant toute la largeur
    Par Altrensa dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 25/03/2010, 11h33
  4. Largeur des colonnes de JTable
    Par Lamy20 dans le forum Composants
    Réponses: 10
    Dernier message: 09/09/2009, 20h17
  5. [JTable] Problème largeur de colonne
    Par donnadieujulien dans le forum Composants
    Réponses: 8
    Dernier message: 24/04/2008, 18h04

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