2013-07-25 14 views
8

Sto cercando di far corrispondere la larghezza della colonna JTable a seconda dei dati all'interno. Il mio codice:Regola automaticamente la colonna Jtable per adattarsi al contenuto

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(); 

    } 
} 

Le dimensioni sono corrette, suppongo che le colonne della tabella abbiano tutte la stessa larghezza! La tabella è incorporata in un ScrollPane in GridBagLayout è questo il problema? Grazie per eventuali suggerimenti.

+2

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

+0

Non funziona neanche. –

risposta

9

Se è possibile utilizzare una libreria in più, provare Swingx (https://java.net/projects/swingx) Qui è presente un JXTable, con un metodo "packAll()", che fa esattamente quello che stai chiedendo

5
col.setWidth(width); 

Leggi la JTable API e segui il collegamento su How to Use Tables. In questo tutorial usano lo setPreferredWidth(...) per suggerire una larghezza per una colonna.

Si potrebbe anche voler controllare il Table Column Adjuster che fa questo per voi. Questa soluzione può anche prendere in considerazione la larghezza dell'intestazione della colonna.

+0

Grazie. Il problema sembra essere se non si aggiunge JTable a un JScrollPane, quindi setWidth, ecc. Non funziona. –

19

Questo è tutto ciò che serve:

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); 

La tabella regolerà ogni larghezza della colonna automaticamente per adattarsi al contenuto. Non è necessario controllare quando attivare il ridimensionamento.

+0

Funzionerà, ma riceverai un avviso che richiede serialVersionUID se non lo aggiungi. +1. –

+0

Sembra che una volta che la colonna della tabella viene ridimensionata a un valore più grande, non si riduca a ritroso per adattarsi allo stato corrente delle colonne. – lordoku