java - resolucion - jtable tamaño dinámico
Tabla SWT: cambio automático de tamaño de todas las columnas (2)
Resuelto con:
private static void resizeColumn(TableColumn tableColumn_)
{
tableColumn_.pack();
}
private static void resizeTable(Table table_)
{
for (TableColumn tc : table.getColumns())
resizeColumn(tc);
}
Qt solution es una única llamada a resizeColumnsToContent () , en .NET uno puede usar TextRenderer.MeasureText () , JTable podría usar AUTO_RESIZE_ALL_COLUMNS .
En SWT, ¿hay alguna manera de programar el tamaño de las columnas después de poblarlas?
Al llamar a computeSize(SWT.DEFAULT, SWT.DEFAULT)
devuelve el mismo valor, sin tener en cuenta el carácter dejado en las columnas.
TableColumn tiene setWidth()
, pero ¿cómo setWidth()
la sugerencia de tamaño para el contenido actual teniendo en cuenta la fuente, etc.?
En muchos casos, las entradas de la tabla cambian en el tiempo de ejecución para reflejar los cambios en el modelo de datos. Agregar entrada al modelo de datos requiere también cambiar el tamaño de las columnas, pero en mi caso llamar a .pack () después de la modificación del modelo no resuelve completamente el problema. En particolar con decoraciones, la última entrada nunca cambia de tamaño. Esto parece deberse a la actualización asincrónica del visor de tabla. Esto cortó resuelto mi problema:
public class LabelDecoratorProvider extends DecoratingStyledCellLabelProvider {
public LabelDecoratorProvider(IStyledLabelProvider labelProvider,
ILabelDecorator decorator, IDecorationContext decorationContext) {
super(labelProvider, decorator, decorationContext);
}
@Override
public void update(ViewerCell cell) {
super.update(cell);
if (TableViewer.class.isInstance(getViewer())) {
TableViewer tableViewer = ((TableViewer)getViewer());
Table table = tableViewer.getTable();
for (int i = 0, n = table.getColumnCount(); i < n; i++)
table.getColumn(i).pack();
}
}
}