У меня есть 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; }
}