2010-07-06 4 views
12

solution Qt est un seul appel à resizeColumnsToContent(), .NET on peut utiliser TextRenderer.MeasureText(), JTable pourrait utiliser AUTO_RESIZE_ALL_COLUMNS.table de SWT: redimensionnement automatique toutes les colonnes

Dans SWT, existe-t-il un moyen de redimensionner les colonnes par programme après les avoir remplies?

L'appel computeSize(SWT.DEFAULT, SWT.DEFAULT) renvoie la même valeur sans tenir compte des restes de caractères dans les colonnes.
TableColumn a setWidth(), mais comment obtenir l'indication de taille pour le contenu actuel en tenant compte de la police, etc.?

Répondre

4

Dans de nombreux cas, les entrées de table changer à l'exécution pour tenir compte des changements dans le modèle de données. Ajouter une entrée au modèle de données nécessite également de redimensionner les colonnes, mais dans mon cas, appeler .pack() après la modification du modèle ne résout pas complètement le problème. En particulier avec les décorations, la dernière entrée n'est jamais redimensionnée. Cela semble dû à la mise à jour de la visionneuse de tables asynchrones. Ce snipped résolu mon problème:

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

résolu avec:

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

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

Ne pas une ligne de fonctions plutôt inutile? Pourquoi ne pas simplement appeler pack dans resizeTable? – Buttons840

+1

Je suis d'accord avec vous dans l'exemple ci-dessus, Buttons840. Mais ils ne sont pas inutiles, si vous voulez rendre un 'one liner' illisible plus expressif/lisible - afin que le nom de la méthode exprime mieux ce que vous faites. –

Questions connexes