Автоматическое изменение ширины столбцов JTable
Мне нужно, чтобы мой JTable автоматически изменял размер столбца в соответствии с содержимым. Я нашел класс TableColumnAdjuster
очень полезным. Но есть небольшая проблема. Скажем, у меня 5 столбцов, и их содержание очень короткое. В этом случае, если я использую автоматический регулятор, он устанавливает первые четыре столбца ширины в соответствии с их содержимым и передает все остальное пространство в последний столбец. См. Пример.
![enter image description here]()
Здесь в последнем столбце Balance
задано все лишнее пространство. Но что, если мне нужно дать это пространство одному из средних столбцов. В приведенном выше случае мне нужно назначить это пространство третьему столбцу, name
. Я пробовал модифицировать метод TableColumnAdjuster
class adjustColumns()
. Но я не мог заставить его работать.
Я попробовал как column.setPreferredWidth()
, так и column.setWidth()
для изменения размеров столбцов. Но, похоже, это ничего не меняет. Как я могу эффективно изменить размеры столбцов a JTable
. Если есть какая-то другая альтернатива или прямой ответ на мою главную проблему, это лучше. Спасибо!
Ответы
Ответ 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