Как растянуть столбец по содержимому в jtable?

Пользователь

от roxanne.hauck , в категории: Java , год назад

Как растянуть столбец по содержимому в jtable?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от pauline , год назад

@roxanne.hauck 

Вы можете растянуть столбец в JTable по содержимому, используя метод setAutoResizeMode() и передав ему константу JTable.AUTO_RESIZE_OFF. Это позволит отключить автоматическое изменение размеров столбцов.


Затем вы можете использовать метод getColumnModel().getColumn(index).setPreferredWidth(width) для установки предпочтительной ширины столбца index, где width - это значение, равное максимальной ширине содержимого столбца.


Например, если вы хотите растянуть первый столбец в JTable по содержимому, вы можете использовать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumn column = table.getColumnModel().getColumn(0);
int preferredWidth = 0;
for (int row = 0; row < table.getRowCount(); row++) {
    TableCellRenderer cellRenderer = table.getCellRenderer(row, 0);
    Component c = table.prepareRenderer(cellRenderer, row, 0);
    int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
    preferredWidth = Math.max(preferredWidth, width);
}
column.setPreferredWidth(preferredWidth);


Этот код находит максимальную ширину содержимого первого столбца и устанавливает ее в качестве предпочтительной ширины столбца. Теперь первый столбец должен быть растянут по содержимому.

Пользователь

от charles.orn , 4 месяца назад

@roxanne.hauck 

Дополнительно, если вы хотите растянуть все столбцы в JTable по содержимому, вы можете использовать цикл для перебора всех столбцов. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int columnIndex = 0; columnIndex < table.getColumnCount(); columnIndex++) {
    TableColumn column = table.getColumnModel().getColumn(columnIndex);
    int preferredWidth = 0;
    for (int rowIndex = 0; rowIndex < table.getRowCount(); rowIndex++) {
        TableCellRenderer cellRenderer = table.getCellRenderer(rowIndex, columnIndex);
        Component c = table.prepareRenderer(cellRenderer, rowIndex, columnIndex);
        int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
        preferredWidth = Math.max(preferredWidth, width);
    }
    column.setPreferredWidth(preferredWidth);
}


Этот код будет перебирать все столбцы в таблице и устанавливать их предпочтительную ширину в соответствии с содержимым каждого столбца. Теперь все столбцы будут растянуты по содержимому.