Qt解决方案是单个调用resizeColumnsToContent(),在.NET中可以使用TextRenderer.MeasureText(),JTable可以使用AUTO_RESIZE_ALL_COLUMNS。
在SWT中,是否有一种方法在填充列后以编程方式调整列大小?
调用computeSize(SWT.DEFAULT, SWT.DEFAULT)
返回相同的值,因此忽略列中剩余的字符。
TableColumn具有setWidth()
,但如何考虑字体等获取当前内容的大小提示?
Qt解决方案是单个调用resizeColumnsToContent(),在.NET中可以使用TextRenderer.MeasureText(),JTable可以使用AUTO_RESIZE_ALL_COLUMNS。
在SWT中,是否有一种方法在填充列后以编程方式调整列大小?
调用computeSize(SWT.DEFAULT, SWT.DEFAULT)
返回相同的值,因此忽略列中剩余的字符。
TableColumn具有setWidth()
,但如何考虑字体等获取当前内容的大小提示?
解决方法:
private static void resizeColumn(TableColumn tableColumn_)
{
tableColumn_.pack();
}
private static void resizeTable(Table table_)
{
for (TableColumn tc : table.getColumns())
resizeColumn(tc);
}
在许多情况下,表格条目在运行时更改以反映数据模型中的更改。向数据模型添加条目需要调整列的大小,但在我的情况下,在修改模型后调用.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();
}
}
}