Последний столбец JTable сокращается - PullRequest
0 голосов
/ 02 августа 2020

Если JTable меньше размера панели, который я хочу использовать AUTO_RESIZE_ALL_COLUMNS.

Если в таблице больше столбцов, я хочу сохранить максимальную ширину всех столбцов с помощью полосы прокрутки.

Но когда я пытаюсь использовать приведенный ниже код, последний столбец сжимается. Я хочу знать, не упустил ли я что-то.

//Adjust columns according to max width(header,Content)
TableColumnAdjuster tca = new TableColumnAdjuster(table);
tca.adjustColumns();

//Adjust the column to max width with double click if the column is shrinked
new ResizeColumnListner(table);

JScrollPane sp = new JScrollPane(table,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS , ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);  

table.getParent().addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(final ComponentEvent e) {
        if (table.getPreferredSize().width < table.getParent().getWidth()) {
            table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS);
        } else {
            table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
        }
    }
});

1 Ответ

1 голос
/ 02 августа 2020

Размер таблицы будет автоматически изменяться в зависимости от значения режима. Существует 5 режимов:

AUTO_RESIZE_OFF: Не настраивать автоматически ширину столбца вообще. Используйте горизонтальную полосу прокрутки для размещения столбцов, когда их сумма превышает ширину области просмотра. Если JTable не заключен в JScrollPane, это может оставить части таблицы невидимыми.

AUTO_RESIZE_NEXT_COLUMN: Используйте только столбец после столбца изменения размера. Это приводит к тому, что «граница» или разделитель между соседними ячейками регулируется независимо.

AUTO_RESIZE_SUBSEQUENT_COLUMNS: Используйте все столбцы после настраиваемого, чтобы поглотить изменения. Это поведение по умолчанию.

AUTO_RESIZE_LAST_COLUMN: Автоматически настраивать размер только последнего столбца. Если границы последнего столбца не позволяют выделить желаемый размер, установите ширину последнего столбца на соответствующий предел и не делайте дальнейших корректировок.

AUTO_RESIZE_ALL_COLUMNS: Распределите дельту между все столбцы в JTable, включая тот, который корректируется.

Из вашего вопроса неясно, как вы добавляете объект JScrollPane в панель содержимого окна фрейма. Вот статья Exploring Swing's Table Component , чтобы прочитать и понять, как все работает вместе.

...