Java (Swing): влияние высоты JList в GridBagLayout

Я хочу создать диалог на 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);

Добавлена ​​новая информация о размере ListModel.

Thorsten 03.01.2009 16:57

О, черт возьми ... Я всегда ненавидел эту проблему. Не забудьте посмотреть "Totally Gridbag" madbean.com/anim/totallygridbag

Uri 05.01.2009 04:27

классный мультик .. где я могу проголосовать за твой ответ ;-)

Thorsten 10.01.2009 23:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
2 455
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я провел еще несколько опросов, и, по-видимому, поведение вызвано количеством элементов в ListModel _myList. Когда я заполняю его большим количеством элементов, чем один или два, которые он имеет в моем текущем использовании, тогда список отображается правильно. Надеюсь, это поможет выявить проблему и найти решение.

Для списка установите weightY = 1 вместо 3. Установка 3 сделает пространство для списка больше, чем сам список. В 99,9% случаев использования GridBagLayout значения weightX / Y всегда должны быть либо 0, либо 1. Также gridWidth, вероятно, должно быть 2 вместо 3.

+1 Это действительно помогло мне решить возникшую у меня проблему. Установка веса для JScrollPane (имеющего JList) соответствующим образом изменит размер компонента по вертикали.

Spoike 25.11.2009 19:17
Ответ принят как подходящий

Нашел проблему .. и к коду верстки отношения не имеет.

Я добавлял null в ListModel, и это, казалось, сбивало с толку LayoutManager. Закрыл бы вопрос, но пока не хватило моджо ...

Вы также можете рассмотреть возможность вызова _myList.setVisibleRowCount(n), чтобы установить предпочтительный размер (в количестве видимых строк) для вашего списка.

Я пробовал, но ничего не изменилось с нулевыми записями. Для общего определения размера это действительно работает, так что +1

Thorsten 07.01.2009 01:18

Другие вопросы по теме