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 :

[JTable] Largeur minimale pour colonnes


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Par défaut [JTable] Largeur minimale pour colonnes
    Bonjour,

    Je cherche à créer une JTable avec un grand nombre de colonnes et j'aimerai que toutes sauf celle la plus à gauche soient réduites à la taille minimale.

    Dans ce but, j'ai essayé des variantes des commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       table.getColumnModel().getColumn(i).setPreferredWidth(15);
       table.getColumnModel().getColumn(i).setMaxWidth(15);
       table.getColumnModel().getColumn(i).setMinWidth(15);
       table.getColumnModel().getColumn(i).setResizable(false);
    Mais rien n'a fonctionné : à chaque fois, seule la colonne la plus à droite était à la bonne taille. Comment peut-on faire ?

  2. #2
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    J'ai fait un test rapide et ca ca marche. Seul ta premiere colonne est maximiser, les autres ont ue taille fixe de 15 :
    Avec jTable1 ma JTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int i=1;i<jTable1.getColumnModel().getColumnCount();i++){
      jTable1.getColumnModel().getColumn(i).setPreferredWidth(15); 
      jTable1.getColumnModel().getColumn(i).setMaxWidth(15); 
      jTable1.getColumnModel().getColumn(i).setMinWidth(15); 
      jTable1.getColumnModel().getColumn(i).setResizable(false);   
    }

  3. #3
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Par défaut
    Merci narfiggo,

    Mais j'ai essayé de mon côté sur les JVM de Sun versions 1.4 et 1.5 et je n'ai pas réussi à le faire fonctionner. Tu peux m'en dire plus sur le fonctionnement de ton code et l'environnement d'exécution ?

  4. #4
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Le code de mon test :
    Classe Test.java
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import javax.swing.*;
     
    public class Test extends JFrame {
     
        /** Creates new form Test */
        public Test() {
            initComponents();
            init();
        }
     
        private void initComponents() {
            jScrollPane1 = new JScrollPane();
            jTable1 = new JTable();
     
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                    System.exit(0);
                }
            });
     
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null}
                },
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }
            ));
            jScrollPane1.setViewportView(jTable1);
     
            getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
     
            pack();
        }    
     
        private void init(){
            for(int i=1;i<jTable1.getColumnModel().getColumnCount();i++){
            jTable1.getColumnModel().getColumn(i).setPreferredWidth(15); 
            jTable1.getColumnModel().getColumn(i).setMaxWidth(15); 
            jTable1.getColumnModel().getColumn(i).setMinWidth(15); 
            jTable1.getColumnModel().getColumn(i).setResizable(false);   
            }
        }
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            new Test().show();
        }
     
     
        // Variables declaration
        private JScrollPane jScrollPane1;
        private JTable jTable1;    
    }
    Sur JVM 1.4

  5. #5
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Par défaut
    Effectivement, ton exemple marche très bien. Il me reste à comprendre ce qui ne va pas dans mon programme.

  6. #6
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Bon courage alors
    Et si tu trouve pas, post ton code pour voir, on essayera de trouver

  7. #7
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Par défaut
    Bon, grâce à ton exemple, narfiggo, j'ai trouvé le problème, je crois.

    Si je crée une JTable, que je la complète avec au moins une ligne de contenu et qu'ensuite, et seulement ensuite, je règle la largeur des colonnes, tout va bien.

    Par contre, si je modifie cette largeur avant qu'il y ait la moindre ligne dans le corps de la table, alors la modification n'a pas d'effet.

    Comme au départ de mon programme, la table doit être vide, j'en suis à réduit à créer la table, rentrer une ligne vide, modifier la largeur des colonnes, puis à supprimer la ligne.

    Y a-t-il une meilleure solution ?

  8. #8
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    A priori meme si ya pas de ligne mais que tu as defini tes colonnes alors ca doit marcher
    Toujours le meme code avec aucune ligne :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import javax.swing.*;
     
    public class Test extends JFrame {
     
        /** Creates new form Test */
        public Test() {
            initComponents();
            init();
        }
     
        private void initComponents() {
            jScrollPane1 = new JScrollPane();
            jTable1 = new JTable();
     
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                    System.exit(0);
                }
            });
     
            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {},
                new String [] {
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }
            ));
            jScrollPane1.setViewportView(jTable1);
     
            getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
     
            pack();
        }    
     
        private void init(){
            for(int i=1;i<jTable1.getColumnModel().getColumnCount();i++){
            jTable1.getColumnModel().getColumn(i).setPreferredWidth(15); 
            jTable1.getColumnModel().getColumn(i).setMaxWidth(15); 
            jTable1.getColumnModel().getColumn(i).setMinWidth(15); 
            jTable1.getColumnModel().getColumn(i).setResizable(false);   
            }
        }
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            new Test().show();
        }
     
     
        // Variables declaration
        private JScrollPane jScrollPane1;
        private JTable jTable1;    
    }
    Assure toi d'avoir bien créer tes colonnes (meme sans ligne) avant de leur affecter une taille fixe...

  9. #9
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Par défaut
    Assure toi d'avoir bien créer tes colonnes (meme sans ligne) avant de leur affecter une taille fixe...
    Ben voilà, c'est exactement ce qui me manquait. Ca faisait un moment que je cherchait. Merci !

  10. #10
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    De rien

    P.S. : Utilise le bouton resolu en bas a gauche au lieu de le marquer a la main. Merci

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

Discussions similaires

  1. [JTable] Largeur des colonnes
    Par opensource dans le forum Composants
    Réponses: 2
    Dernier message: 08/02/2008, 10h39
  2. Largeur fixe pour une colonne de GridView
    Par slokix dans le forum ASP.NET
    Réponses: 11
    Dernier message: 26/09/2007, 09h01
  3. [JTable] largeur de colonne differente selon la ligne
    Par Bideul dans le forum Composants
    Réponses: 5
    Dernier message: 30/11/2006, 11h53
  4. [JTable] Largeur de colonne
    Par BainE dans le forum Composants
    Réponses: 4
    Dernier message: 22/11/2006, 18h44
  5. JTable Largeur de colonne + retour à la ligne
    Par Invité dans le forum Composants
    Réponses: 7
    Dernier message: 02/02/2006, 23h05

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