SWT表格:自动调整所有列的大小

14

Qt解决方案是单个调用resizeColumnsToContent(),在.NET中可以使用TextRenderer.MeasureText(),JTable可以使用AUTO_RESIZE_ALL_COLUMNS

在SWT中,是否有一种方法在填充列后以编程方式调整列大小?

调用computeSize(SWT.DEFAULT, SWT.DEFAULT)返回相同的值,因此忽略列中剩余的字符。
TableColumn具有setWidth(),但如何考虑字体等获取当前内容的大小提示?

2个回答

21

解决方法:

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

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

14
一行函数不是相当无用吗?为什么不直接在resizeTable中调用pack呢? - Buttons840
1
我同意你在上面的例子中的观点,Buttons840。但是如果你想让一个难以阅读的“一行代码”更具表现力/可读性,那么它们并不是无用的 - 这样方法名称可以更好地表达你所做的事情。 - Kai Mechel

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();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接