usted no está realmente interesado en la longitud de cadena (ni su asignación a una fuente concreta/métricas). Le interesa el tamaño preferido del componente rendering que representa el contenido de la celda. Para conseguir eso, bucle a través de todas las filas y consultar el tamaño, algo así como
int width = 0;
for (row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, myColumn);
Component comp = table.prepareRenderer(renderer, row, myColumn);
width = Math.max (comp.getPreferredSize().width, width);
}
O utilice JXTable (en el proyecto SwingX): tiene un paquete de método(), que hace el trabajo para usted :-)
Editar: la razón para preferir el preaparado de la tabla sobre la invocación manual de getXXRendererComponent en el representador es que la tabla podría decorar las propiedades visuales del componente rendering. Si esas decoraciones efectúan el prefSize del componente, una configuración manual está desactivada.
tableColumn.getWidth() = tableColumn.getPreferredWidth() - la antigua propiedad es! el ancho real, mientras que el último es lo que las columnas quieren obtener. Según el autoResizeMode de JTable, las columnas se comprimen/extienden para ajustarse a la ventana gráfica. Pruebe table.setAutoResizeMode (JTable.AUTO_RESIZE_OFF). Lo más probable es que esto muestre una barra de desplazamiento (la tabla está en un JScrollPane, ¿verdad?) Y el ancho de la columna es el mismo que su prefWidth – kleopatra
. Excelente respuesta, recién estaba implementando esta lógica con la longitud de cadena cuando encontré esta pregunta. ¿Pero también tienes una idea de cómo considerar la longitud del nombre de la columna? –
Bien, acabo de descubrir que hay un método 'getHeaderRenderer()' –