Таблица SWT: автоматическое изменение размера всех столбцов - PullRequest
13 голосов
/ 06 июля 2010

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

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

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

Ответы [ 2 ]

20 голосов
/ 06 июля 2010

Решено с:

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

}
private static void resizeTable(Table table_)
{
    for (TableColumn tc : table.getColumns())
        resizeColumn(tc);
}
4 голосов
/ 09 сентября 2012

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