2013-07-25 5 views
8

J'essaie de faire correspondre la largeur de la colonne JTable en fonction des données à l'intérieur. Mon code:Ajuster automatiquement la colonne Jtable pour l'adapter au contenu

for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){ 
     int width =0; 
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) { 
     TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column); 
     Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column); 
     width = Math.max (comp.getPreferredSize().width, width); 
     System.out.println(width); 
    } 
    TableColumn col = new TableColumn(); 
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column); 
    System.out.println(width); 
    col.setWidth(width); 
    gui.testsuiteInfoTable.revalidate(); 

    } 
} 

Les tailles sont correctes je suppose mais les colonnes de table ont toujours la même largeur! La table est intégrée dans un ScrollPane dans un GridBagLayout est-ce le problème? Merci pour vos suggestions

+2

Regardez [link] (http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/) –

+0

Ne fonctionne pas non plus. –

Répondre

9

Si vous pouvez utiliser une bibliothèque supplémentaire, essayez SwingX (https://java.net/projects/swingx) Il vous avez un JXTable, avec une méthode « Packall() », qui fait exactement ce que vous demandez

5
col.setWidth(width); 

Lire la JTable API et suivez le lien sur How to Use Tables. Dans ce tutoriel, ils utilisent le setPreferredWidth(...) pour suggérer une largeur pour une colonne.

Vous pouvez également consulter le Table Column Adjuster qui le fait pour vous. Cette solution peut également prendre en compte la largeur de l'en-tête de colonne.

+0

Merci. Le problème semble être si vous n'ajoutez pas le JTable à un JScrollPane, alors setWidth etc. ne fonctionne pas. –

19

Ceci est tout ce que vous devez:

JTable table = new JTable(){ 
    @Override 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
      Component component = super.prepareRenderer(renderer, row, column); 
      int rendererWidth = component.getPreferredSize().width; 
      TableColumn tableColumn = getColumnModel().getColumn(column); 
      tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth())); 
      return component; 
     } 
    }; 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

Le tableau ajuste chaque largeur de la colonne automatiquement en fonction du contenu. Il n'est pas nécessaire de contrôler quand déclencher le redimensionnement.

+0

Cela fonctionne, mais vous recevrez un avertissement demandant serialVersionUID si vous ne l'ajoutez pas. +1 –

+0

Il semble qu'une fois que la colonne de la table est redimensionnée à une valeur plus grande, elle ne rétrécit pas pour s'adapter à l'état actuel des colonnes. – lordoku

Questions connexes