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] Problème largeur de colonne


Sujet :

Composants Java

  1. #1
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut [JTable] Problème largeur de colonne
    Bonjour,

    j'ai besoin d'afficher des infos dans un tableau, donc Jtable me parait être l'outil quil me faut.

    J'ai trouvé une classe AbstractTableModel.

    Mon problème est que les colonnes sont toujours de taille identiques, et je ne peux pas voir le contenu car il y en a trop.

    J'ai donc une classe construite avec AbstractTableModel, et dans la classe ou je veu afficher le tableau, j'utilise un jScrollPanel dans lequel j'ai mis ma jTable.

    Je développe avec Jbuilder. J'ai essayé de régler la taille minimale, maximale, les ajustements automatiques, mais rien n'y fait. Pourtant ca marche tres bien pour le scroll vertical....

    La Classe AbstractModel :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    public class Tmodel extends AbstractTableModel{
     
      String[] columnNames = null ;
      Object[][] data = null ;
      int edit_limite = 0 ;
     
      public Tmodel(int l, int c,String[] header, int ec)
      {
        data = new Object[l][c] ;
        columnNames = header ;
        edit_limite = ec ;
      }
     
      public int getColumnCount(){
        return columnNames.length;
      }
     
      public Object getValueAt(int l, int c){
        return data[l][c] ;
      }
     
      public void setValueAt(Object val ,int l, int c){
         data[l][c]= val ;
      }
     
      public int getRowCount(){
        return data.length ;
      }
     
      public String getColumnName(int c){
        return columnNames[c] ;
      }
     
      public Class getColumnClass(int c){
        try{
          return getValueAt(0,c).getClass();
        }
        catch (Exception ex){
          return "".getClass() ;
        }
      }
     
      public boolean isCellEditable(int r, int c){
        if(c<edit_limite)
          return false ;
        else
          return true ;
      }
    }
     
    La classe fenetre :
     
     
     
    public class SimautoCadre extends JFrame{
       Tmodel TablePerso = null ;
      JPanel contentPane;
      JPanel jPanel1 = new JPanel();
      JScrollPane jScrollPane1 = new JScrollPane();
      JTable jTable1 = null ;
      private Border border1;
      JButton jButton1 = new JButton();
      JTextArea jTextArea1 = new JTextArea();
      JTextArea jTextArea2 = new JTextArea();
      AutoSizeCellClass auto = new AutoSizeCellClass();
     
     
      public SimautoCadre()
      {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        try
        {
          jbInit();
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
      }
     
      /**Component initialization*/
      private void jbInit() throws Exception{
        contentPane = (JPanel) this.getContentPane();
        border1 = BorderFactory.createMatteBorder(6,6,6,6,Color.orange);
        titledBorder1 = new TitledBorder("");
        contentPane.setLayout(null);
        this.setResizable(false);
        this.setSize(new Dimension(1000, 800));
        this.setTitle("Résultats Simulation Automatique");
        jPanel1.setBorder(BorderFactory.createEtchedBorder());
        jPanel1.setBounds(new Rectangle(142, 253, 480, 155));
        jPanel1.setLayout(null);
        jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        jScrollPane1.setAutoscrolls(true);
        jScrollPane1.setBorder(BorderFactory.createEtchedBorder());
        jScrollPane1.setBounds(new Rectangle(0, 0, 1020, 500));
     
        jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
        contentPane.add(jScrollPane1, null);
        contentPane.add(jButton1, null);
        contentPane.add(jPanel1, null);
     
        // initialiser notre modèle de table
              String[] colh = {"Sim simple/complète","Armoires KO","Nombre Armoires KO",puissancearmstock.nomarmoire[0]} ;
          TablePerso = new Tmodel(BarreSimAuto.nbcas,4,colh,BarreSimAuto.nbcas);
     
     
        // la table basée sur notre modèle de table
        jTable1 = new JTable(TablePerso);
        jTable1.setGridColor(Color.green);
        jTable1.setFont(new java.awt.Font("SansSerif", 1, 16));
        jScrollPane1.getViewport().add(jTable1, null);
        auto.autoSizeCells(jTable1,true,true);
     
       }
    J'ai volontairement enlevé l'implantation des données car ce n'est pas ce qui nous intéresse.

    Comment faire pour modifier la largeur des colonnes????

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    Comment faire pour modifier la largeur des colonnes????
    Tu peux obtenir un objet TableColumn avec la méthode getColumn() de la table ou via son TableColumnModel.
    L'objet TableColumn possède des méthodes pour la gestion des tailles de colonnes : setWidth(), setMinWidth(), setMaxWidth()

    Si tu veux que tes colonnes aient exactement la taille que tu as fixé, il faut désactiver le mode de resize auto des colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF).
    Si tu gardes le mode par défaut, les colonnes conserveront les proportions que tu as fixés entres elles.

    Fred

  3. #3
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut
    TableColumn remplacerait jTable??
    Je ne vois pas bien comment l'implanter dans mon algorithme??

    J'ai compris que TableColumn ne remplace pas Jtable, mais je ne vois pas comment faire pointer tablecolumn sur la jtable?

  4. #4
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Encore moi
    J'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Table Column trer = new TableColumn();
    jTable1.add(trer);
    trer.getColumn(0).setWidth(50);
    et ca change rien.....

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par kwxyz Voir le message
    Tu peux obtenir un objet TableColumn avec la méthode getColumn() de la table ou via son TableColumnModel.
    ce qui signifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TableColumn col = table.getColumn("IdentifiantColonne");
    ou
    TableColumnModel columnModel = table.getColumnModel();
    TableColumn col = columnModel.getColumn(0);
    Fred

  6. #6
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Toujours pas
    J'ai fait

    TableColumn col = jTable1.getColumn("nom header colonne");

    col.setWidth(100);

    Mais ca ne marche toujours pas.

    En fait j'ai l'impression que y a une taille fixe sur la jTable et que la largeur des colonnes dépend du nombre de colonnes.

    Mais je n'ai pas défini de dimensionà jTable.
    Pourant je suis bien en autoSize OFF.

    Franchement je vois pas.
    Dans le programme on peut avoir de deux colonnes jusqu'a 40.
    Quand j'en ai deux, ca prend toute la fenetre et ca fait des colonnes énormes, alors que quand j'en ai 40, la on voit plus rien....

    Help PLEAZE!!!

    PS : vive QT

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Il va falloir que tu postes ton code.
    Ce que tu décris, c'est le comportement de l'autoresize, si tu l'as désactivé ça ne devrait plus faire ça.

    Fred

  8. #8
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Résolu
    J'ai redéveloppé la classe...et ça marche nikel.

    Conclusion : quand on a un bug sur une classe qu'on a pas trouché depuis 1an, que la fenetre est blindée de labels et autres...On gagne du temps à refaire complètement la classe. Je le saurais pour la prochaine fois.

    Merci pour ton aide fred et à bientôt!

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par donnadieujulien Voir le message
    On gagne du temps à refaire complètement la classe. Je le saurais pour la prochaine fois.
    On gagne surtout du temps à coder de façon segmentée et organisée depuis le départ

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

Discussions similaires

  1. [JTable] Problème d'affichage des titres de colonnes
    Par saidgrd dans le forum Composants
    Réponses: 2
    Dernier message: 10/05/2008, 20h37
  2. [JTable] Largeur des colonnes
    Par opensource dans le forum Composants
    Réponses: 2
    Dernier message: 08/02/2008, 10h39
  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