2010-07-06 106 views
12

Qt的解決方案是resizeColumnsToContent()單呼,在.NET中可以使用TextRenderer.MeasureText(),JTable中可以使用 AUTO_RESIZE_ALL_COLUMNSSWT表:自動調整所有的列

在SWT中,有沒有一種方法可以在填充它們之後調整列的大小?

調用computeSize(SWT.DEFAULT, SWT.DEFAULT)返回相同的值,因此不考慮列中字符殘留。
TableColumn具有setWidth(),但我如何獲得考慮到字體等當前內容的大小提示?

回答

4

在許多情況下,表項在運行時改變,以反映在數據模型中的變化。向數據模型添加條目還需要調整列的大小,但在我的情況下,在修改模型後調用.pack()並不能完全解決問題。特別是裝飾品,最後一項不會調整大小。這是由於異步查看器更新造成的。這削減解決了我的問題:

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

解決了:

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

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

是不是一行功能,而不是無用的?爲什麼不在調整大小表中調用pack? – Buttons840 2011-11-04 14:45:07

+1

我同意你在上面的例子中,Buttons840。但是,如果你想使一個不可讀的'單行'更具表現力/可讀性 - 它們並非無用,這樣方法名稱可以更好地表達你所做的事情。 – 2014-05-14 08:59:07