У меня есть JTable с несколькими столбцами. Я хочу, чтобы размер определенного столбца был изменен. Я надеялся, что при использовании setPreferredWidth размер столбца изменится до этого размера или размера содержимого, чтобы не происходило усечения , и пусть остальные столбцы занимают оставшееся пространство, но вместо этого все столбцов, включая тот, который я изменил, поровну разделяет все пространство таблицы; как если бы setPreferredWidth ничего не сделал . Фактически, я хочу иметь возможность установить ширину столбца и уменьшить его до этого размера без усечения содержимого (не слишком ли я подчеркивал это?) Таким образом, чтобы все столбцы с размер не был изменен, заполните оставшееся пространство. Использование setMaxWidth обрезает содержимое (я уже упоминал, что мне это не понравилось?) Как мне изменить размер / уменьшить столбец без его усечения и без выполнения абсолютно ничего ? Вот код нарушения:
for (int i = 0, x = 0; i < table.getColumnModel().getColumnCount(); i++)
if ((x = model.getColumnWidth(i)) > -1)
table.getColumnModel().getColumn(i).setPreferredWidth(x);
Таблица находится в JPanel (MyListPanel - BorderLayout), который находится в другом JPanel (GridBagLayout), добавленном с помощью:
new GridBagConstraints(0, 3, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 0, 2), 0, 0))
РЕДАКТИРОВАТЬ: Это конструктор для моего подкласса JPanel:
public MyListPanel(boolean showHeader, String title, ColData...columns) {
super(new BorderLayout());
model = new MyListTableModel(columns);
table = new JTable(model);
table.addFocusListener(this);
add(table);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
setTitle(title);
if (showHeader)
add(table.getTableHeader(), BorderLayout.NORTH);
for (int i = 0, x = 0; i < table.getColumnModel().getColumnCount(); i++)
if ((x = model.getColumnWidth(i)) > -1)
table.getColumnModel().getColumn(i).setPreferredWidth(x);
setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
}
И MyListTableModel.ColData:
public static class ColData {
private int index;
private String title;
private int width;
public ColData(int _index, String _title, int _width) { index = _index; title = _title; width = _width; }
}