2011-06-24 28 views
5

Tengo la siguiente JTable (en realidad es un ETable de Netbeans). Se extiende a través del recipiente que está en - me gustaría tener eso, y no utilizar JTable.AUTO_RESIZE_OFFAuto/mejor ajuste columnas JTable, pero estirar la última columna

enter image description here

me gustaría encajar mediante programación, como a continuación, cambiar el tamaño de cada columna para encajar el único del el contenido de la celda o el texto del encabezado de la columna y la columna de la derecha llenan el espacio restante. Cómo puedo hacer eso ?

enter image description here

+0

ver este tutorial: [Tabla Columna Ajustador] (http://tips4java.wordpress.com/2008/11/10/table-column-ajustador /) –

Respuesta

0

Puede desactivar cambio de tamaño automático. En este caso, las columnas cambiarán el tamaño automáticamente según el contenido. Pero en este caso, si el ancho total de la columna es menor que el ancho de la tabla, el espacio en blanco estará allí en el lado derecho. Si es mayor, aparecerá la barra de desplazamiento horizontal.

Puede asignar ancho preferido a cada columna usando TableColumn.setPreferredWidth. Swing intentará distribuir espacio extra según eso. Pero esto tampoco está garantizado.

0

Debe establecer autoResize en OFF (setAutoResizeMode(JTable.AUTO_RESIZE_OFF);), pero también necesita un método de ayuda para cambiar el tamaño de sus columnas.

Este es el interior de una clase personalizada que se extiende JTable, pero que sólo puede hacer referencia a la misma facilidad con un JTable existente:

public void resizeColumnWidth() { 
    int cumulativeActual = 0; 
    int padding = 15; 
    for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) { 
     int width = 50; // Min width 
     TableColumn column = columnModel.getColumn(columnIndex); 
     for (int row = 0; row < getRowCount(); row++) { 
      TableCellRenderer renderer = getCellRenderer(row, columnIndex); 
      Component comp = prepareRenderer(renderer, row, columnIndex); 
      width = Math.max(comp.getPreferredSize().width + padding, width); 
     } 
     if (columnIndex < getColumnCount() - 1) { 
      column.setPreferredWidth(width); 
      cumulativeActual += column.getWidth(); 
     } else { //LAST COLUMN 
      //Use the parent's (viewPort) width and subtract the previous columbs actual widths. 
      column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual); 
     } 
    } 
} 

llamada resizeColumnWidth() cada vez que se agrega una fila.

añadir Opcionalmente un oyente a la mesa de modo que las columnas también se redimensionan cuando la propia tabla se cambia el tamaño:

public MyCustomJTable() { 
    super(); 
    addHierarchyBoundsListener(new HierarchyBoundsAdapter() { 
     @Override 
     public void ancestorResized(HierarchyEvent e) { 
      super.ancestorResized(e); 
      resizeColumnWidth(); 
     } 
    }); 
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
} 
Cuestiones relacionadas