2011-06-23 30 views
9

Tengo un JTable con 3 columnas:Auto cambiar el tamaño de las anchuras de las columnas de JTable dinámicamente

- No. # 
- Name 
- PhoneNumber 

Quiero hacer ancho específico para cada columna de la siguiente manera:

enter image description here

y quiero la JTable puede actualizar el ancho de sus columnas dinámicamente si es necesario (por ejemplo, insertar un número grande en la columna #) y mantener el mismo estilo de la JTable

I resuelto la primera cuestión, utilizando este código:

myTable.getColumnModel().getColumn(columnNumber).setPreferredWidth(columnWidth); 

pero no lo hice éxito para hacer myTable para actualizar los anchos de forma dinámica sólo si el ancho actual de la columna no se ajusta a su contenido. ¿Me pueden ayudar a resolver este problema?

Respuesta

13

Aquí encontré mi respuesta: http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
La idea es comprobar el contenido de algunas filas longitud para ajustar el ancho de la columna.
En el artículo, el autor proporcionó un código completo en un archivo java descargable.

JTable table = new JTable(...); 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

for (int column = 0; column < table.getColumnCount(); column++) 
{ 
    TableColumn tableColumn = table.getColumnModel().getColumn(column); 
    int preferredWidth = tableColumn.getMinWidth(); 
    int maxWidth = tableColumn.getMaxWidth(); 

    for (int row = 0; row < table.getRowCount(); row++) 
    { 
     TableCellRenderer cellRenderer = table.getCellRenderer(row, column); 
     Component c = table.prepareRenderer(cellRenderer, row, column); 
     int width = c.getPreferredSize().width + table.getIntercellSpacing().width; 
     preferredWidth = Math.max(preferredWidth, width); 

     // We've exceeded the maximum width, no need to check other rows 

     if (preferredWidth >= maxWidth) 
     { 
      preferredWidth = maxWidth; 
      break; 
     } 
    } 

    tableColumn.setPreferredWidth(preferredWidth); 
} 
1

Utilice el método addRow (...) del DefaultTableModel para agregar datos dinámicamente a la tabla.

Actualización:

Para ajustar el ancho de una columna visible Creo que es necesario utilizar:

tableColumn.setWidth(...); 
+0

perdón, quiero hacer actualizar JTable los anchos de forma dinámica, pero me escribió para hacer que la JTable se actualice dinámicamente, lo siento –

+0

@Eng Fouad, consulte la actualización. – camickr

+1

Por cierto, la respuesta aceptada es realmente tuya;) – Matthieu

0

De hecho, me encuentro con este problema. Encontré un enlace útil que resolvió mi problema. Prácticamente obtener la columna específica y establecer su setMinWidth y setMaxWidth a ser el mismo (como fijo.)

private void fixWidth(final JTable table, final int columnIndex, final int width) { 
    TableColumn column = table.getColumnModel().getColumn(columnIndex); 
    column.setMinWidth(width); 
    column.setMaxWidth(width); 
    column.setPreferredWidth(width); 
} 

Ref: https://forums.oracle.com/thread/1353172

Cuestiones relacionadas