Я хочу создать диалог на Java со списком и парой кнопок под ним. Список заканчивается той же высотой, что и кнопки (около одной строки), а весь диалог имеет высоту около двух строк.
Тем не менее, я бы хотел, чтобы диалог был выше (может быть, 10 строк), а JList занимал большую часть места ... Я поигрался с параметрами, но на всю жизнь не могу заставить его работать . Любые идеи?
Вот мой текущий код:
//layout
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
int y = 0;
//List
gbc.gridx = 0;
gbc.gridy = y;
gbc.weighty = 3;
gbc.weightx = 1;
gbc.gridwidth= 3;
add(new JScrollPane(_myList), gbc);
_myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Buttons
gbc.gridx = 1;
gbc.gridy = ++y;
gbc.gridwidth = 1;
gbc.weighty = 0;
add(_Save, gbc);
gbc.gridx = 2;
add(_Cancel, gbc);
О, черт возьми ... Я всегда ненавидел эту проблему. Не забудьте посмотреть "Totally Gridbag" madbean.com/anim/totallygridbag
классный мультик .. где я могу проголосовать за твой ответ ;-)




Я провел еще несколько опросов, и, по-видимому, поведение вызвано количеством элементов в ListModel _myList. Когда я заполняю его большим количеством элементов, чем один или два, которые он имеет в моем текущем использовании, тогда список отображается правильно. Надеюсь, это поможет выявить проблему и найти решение.
Для списка установите weightY = 1 вместо 3. Установка 3 сделает пространство для списка больше, чем сам список. В 99,9% случаев использования GridBagLayout значения weightX / Y всегда должны быть либо 0, либо 1. Также gridWidth, вероятно, должно быть 2 вместо 3.
+1 Это действительно помогло мне решить возникшую у меня проблему. Установка веса для JScrollPane (имеющего JList) соответствующим образом изменит размер компонента по вертикали.
Нашел проблему .. и к коду верстки отношения не имеет.
Я добавлял null в ListModel, и это, казалось, сбивало с толку LayoutManager. Закрыл бы вопрос, но пока не хватило моджо ...
Вы также можете рассмотреть возможность вызова _myList.setVisibleRowCount(n), чтобы установить предпочтительный размер (в количестве видимых строк) для вашего списка.
Я пробовал, но ничего не изменилось с нулевыми записями. Для общего определения размера это действительно работает, так что +1
Добавлена новая информация о размере ListModel.