TableColumn setPreferredWidth не работает

У меня есть 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; }
}
7
задан Ethan Reesor 16 October 2011 в 07:17
поделиться