Qt解决方案是对 resizeColumnsToContent()的单个调用,在.NET中可以使用 TextRenderer.MeasureText(),JTable可以使用 AUTO_RESIZE_ALL_COLUMNS
在SWT中,是否有一种方法可以在填充列后对programmaticaly进行大小调整?
调用computeSize(SWT.DEFAULT, SWT.DEFAULT)
会返回相同的值,从而忽略列中剩余的字符
TableColumn有setWidth()
,但如何在考虑字体外观的情况下获取当前内容的大小提示?
答案 0 :(得分:20)
解决:
private static void resizeColumn(TableColumn tableColumn_)
{
tableColumn_.pack();
}
private static void resizeTable(Table table_)
{
for (TableColumn tc : table.getColumns())
resizeColumn(tc);
}
答案 1 :(得分: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();
}
}
}