Автоматическое изменение ширины столбцов JTable динамически - PullRequest
10 голосов
/ 23 июня 2011

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

- No. #
- Name
- PhoneNumber

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

enter image description here

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 23 июня 2011

Здесь я нашел свой ответ: 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 );
}
1 голос
/ 23 июня 2011

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

Обновление:

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

tableColumn.setWidth(...);
0 голосов
/ 27 ноября 2013

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

Ref: https://forums.oracle.com/thread/1353172

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...