Подтвердить что ты не робот

Таблица SWT: автоматическое изменение размера всех столбцов

Решение Qt - это один вызов resizeColumnsToContent(), в .NET можно использовать TextRenderer.MeasureText(), JTable может использовать AUTO_RESIZE_ALL_COLUMNS.

В SWT есть способ программно изменить размеры столбцов после их заполнения?

Вызов computeSize(SWT.DEFAULT, SWT.DEFAULT) возвращает одно и то же значение, не обращая внимания на оставленные символы в столбцах.
TableColumn имеет setWidth(), но как мне получить подсказку размера для текущего содержимого с учетом шрифта и т.д.?

4b9b3361

Ответ 1

Во многих случаях записи таблицы меняются во время выполнения, чтобы отразить изменения в модели данных. Для добавления записи в модель данных требуется также изменить размер столбцов, но в моем случае вызов .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();
        }
    }
}

Ответ 2

Решено:

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

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