Изменение размера столбца JTable не работает - PullRequest
2 голосов
/ 26 июня 2009
table.getTableHeader().setResizingAllowed(false);
column = table.getColumn(columns[0]);
column.setWidth(25);
column = table.getColumn(columns[1]);
column.setWidth(225);
column = table.getColumn(columns[2]);
column.setWidth(50);
table.doLayout()

Это отказывается устанавливать столбцы на их указанную ширину. Любая причина почему?

Ответы [ 3 ]

3 голосов
/ 26 июня 2009

Swing игнорирует ширину столбца, установленную вами, когда режим изменения размера JTable не равен AUTO_RESIZE_OFF. Вместо использования setWidth используйте setPreferredWidth. Таблица будет использовать это значение при разметке столбцов. Если вы установите минимальную, максимальную и предпочтительную ширину, она должна работать на все случаи жизни, но ваши пользователи больше не смогут сами изменять ширину столбца. Так что используйте это с осторожностью.

Процесс компоновки подробно описан в API-документах

0 голосов
/ 06 февраля 2012

Я не мог заставить это работать целую вечность, тогда я наконец нашел, что мне нужно было установить autoCreateColumnsFromModel в false.

edit: игнорировать это, это было следствием запуска tableStructureChanged, когда я хотел tableDataChanged (см. Обсуждение ниже, и спасибо kleopatra за выявление ошибки)

0 голосов
/ 16 июля 2009

Чтобы это работало для моей таблицы, я переопределил setBounds и установил там предпочтительную ширину:

@Override
public void setBounds(int x, int y, int width, int height)
{
    super.setBounds(x, y, width, height);

    setPreferredColumnWidths(new double[] { 0.4, 0.4, 0.1, 0.1 });
}


Я получил реализацию setPreferredColumnWidths из этой статьи .

protected void setPreferredColumnWidths(double[] percentages)
{
    Dimension tableDim = getPreferredSize();

    double total = 0;

    for (int i = 0; i < getColumnModel().getColumnCount(); i++)
    {
        total += percentages[i];
    }

    for (int i = 0; i < getColumnModel().getColumnCount(); i++)
    {
        TableColumn column = getColumnModel().getColumn(i);
        column.setPreferredWidth(
             (int)(tableDim.width * (percentages[i] / total)));
    }
}
...