2010-07-06 11 views
12

solución Qt es una sola llamada a resizeColumnsToContent(), en .NET se puede utilizar TextRenderer.MeasureText(), JTable podría utilizar AUTO_RESIZE_ALL_COLUMNS.tabla SWT: cambiar el tamaño de todas las columnas de auto

En SWT, ¿hay alguna manera de programar el tamaño de las columnas después de rellenarlas?

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 obtengo la sugerencia de tamaño para el contenido actual teniendo en cuenta la fuente de la fuente, etc.?

Respuesta

4

En muchos casos, las entradas de la tabla cambiar en 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(); 
     } 
    } 
} 
19

resuelve con:

private static void resizeColumn(TableColumn tableColumn_) 
{ 
    tableColumn_.pack(); 

} 
private static void resizeTable(Table table_) 
{ 
    for (TableColumn tc : table.getColumns()) 
     resizeColumn(tc); 
} 
+14

¿No son las funciones de una línea más bien inútiles? ¿Por qué no simplemente llamar a pack en resizeTable? – Buttons840

+1

Estoy de acuerdo con usted en el ejemplo anterior, Buttons840. Pero no son inútiles, si desea hacer que un 'trazador de líneas' ilegible sea más expresivo/legible, de modo que el nombre del método exprese mejor lo que usted hace. –

Cuestiones relacionadas