Подтвердить что ты не робот

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

Мне нужно, чтобы мой JTable автоматически изменял размер столбца в соответствии с содержимым. Я нашел класс TableColumnAdjuster очень полезным. Но есть небольшая проблема. Скажем, у меня 5 столбцов, и их содержание очень короткое. В этом случае, если я использую автоматический регулятор, он устанавливает первые четыре столбца ширины в соответствии с их содержимым и передает все остальное пространство в последний столбец. См. Пример.

enter image description here

Здесь в последнем столбце Balance задано все лишнее пространство. Но что, если мне нужно дать это пространство одному из средних столбцов. В приведенном выше случае мне нужно назначить это пространство третьему столбцу, name. Я пробовал модифицировать метод TableColumnAdjuster class adjustColumns(). Но я не мог заставить его работать.

Я попробовал как column.setPreferredWidth(), так и column.setWidth() для изменения размеров столбцов. Но, похоже, это ничего не меняет. Как я могу эффективно изменить размеры столбцов a JTable. Если есть какая-то другая альтернатива или прямой ответ на мою главную проблему, это лучше. Спасибо!

4b9b3361

Ответ 1

Вы можете попробовать следующее:

public void resizeColumnWidth(JTable table) {
    final TableColumnModel columnModel = table.getColumnModel();
    for (int column = 0; column < table.getColumnCount(); column++) {
        int width = 15; // Min width
        for (int row = 0; row < table.getRowCount(); row++) {
            TableCellRenderer renderer = table.getCellRenderer(row, column);
            Component comp = table.prepareRenderer(renderer, row, column);
            width = Math.max(comp.getPreferredSize().width +1 , width);
        }
        if(width > 300)
            width=300;
        columnModel.getColumn(column).setPreferredWidth(width);
    }
}

JTable

Это нужно выполнить перед методом изменения размера.
Если у вас есть:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JTable

Ответ 2

Нет возможности автоматически изменять размер одного столбца больше другого.

Возможно, вы можете сделать что-то вроде:

tca = new TableColumnAdjuster( table, 0 );
tca.adjustColumns();
TableColumnModel tcm = table.getColumnModel();  
TableColumn tc = tcm.getColumn(1);
tc.setWidth(tc.getWidth() + 25);

Это позволит вам добавить дополнительное пространство в столбец 1. Это дополнительное пространство будет добавлено только при первом отображении таблицы.

Другим вариантом является использование:

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

Это будет выделять дополнительное пространство пропорционально каждому столбцу.

Ответ 3

setAutoResizeMode() сообщит вашей таблице, как изменить размер, вы должны дать ему попробовать все различные варианты, доступные для просмотра различий. В моем случае я хотел конкретно изменить размер двух столбцов и позволить ему решить как настроить все остальные.

jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
TableColumnModel colModel=jTable1.getColumnModel();
colModel.getColumn(1).setPreferredWidth(25);    
colModel.getColumn(2).setPreferredWidth(400);

Ответ 4

Вы можете сделать это:

JPanel jp = new JPanel();
jp.add(table);

jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part