Автоматическое изменение ширины столбцов JTable динамически.

У меня есть JTable с 3 столбцами:

- No. #
- Name
- PhoneNumber

Я хочу сделать определенную ширину для каждого столбца следующим образом:

введите здесь описание изображения

и я хочу, чтобы JTable мог динамически обновлять ширину своих столбцов, если это необходимо (например, вставляя большое число в столбец #) и сохраняя тот же стиль JTable

Я решил первую проблему, используя этот код:

myTable.getColumnModel().getColumn(columnNumber).setPreferredWidth(columnWidth);

но мне не удалось заставить myTable динамически обновлять ширину ТОЛЬКО, если текущая ширина столбца не соответствует его содержимому. Можете ли вы помочь мне решить эту проблему?


person Eng.Fouad    schedule 23.06.2011    source источник


Ответы (3)


Здесь я нашел свой ответ: http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
Идея состоит в том, чтобы проверить длину содержимого некоторых строк, чтобы настроить ширину столбца.
В статье автор предоставил полный код в загружаемом файле Java. .

JTable table = new JTable( ... );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

for (int column = 0; column < table.getColumnCount(); column++)
{
    TableColumn tableColumn = table.getColumnModel().getColumn(column);
    int preferredWidth = tableColumn.getMinWidth();
    int maxWidth = tableColumn.getMaxWidth();

    for (int row = 0; row < table.getRowCount(); row++)
    {
        TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
        Component c = table.prepareRenderer(cellRenderer, row, column);
        int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
        preferredWidth = Math.max(preferredWidth, width);

        //  We've exceeded the maximum width, no need to check other rows

        if (preferredWidth >= maxWidth)
        {
            preferredWidth = maxWidth;
            break;
        }
    }

    tableColumn.setPreferredWidth( preferredWidth );
}
person Eng.Fouad    schedule 23.06.2011

Используйте метод addRow(...) модели DefaultTableModel для динамического добавления данных в таблицу.

Обновлять:

Чтобы настроить ширину видимого столбца, я думаю, вам нужно использовать:

tableColumn.setWidth(...);
person camickr    schedule 23.06.2011
comment
ой, я хочу, чтобы JTable динамически обновлял ширину, но я написал, чтобы JTable обновлялся динамически, извините - person Eng.Fouad; 23.06.2011
comment
Кстати, принятый ответ на самом деле ваш;) - person Matthieu; 12.12.2016

Я на самом деле тоже столкнулся с этой проблемой. Я нашел одну полезную ссылку, которая решила мою проблему. В значительной степени получите конкретный столбец и установите его setMinWidth и setMaxWidth одинаковыми (как фиксированные).

private void fixWidth(final JTable table, final int columnIndex, final int width) {
    TableColumn column = table.getColumnModel().getColumn(columnIndex);
    column.setMinWidth(width);
    column.setMaxWidth(width);
    column.setPreferredWidth(width);
}

Ссылка: https://forums.oracle.com/thread/1353172

person Alan Dong    schedule 26.11.2013