Ява(Качели):влияние высоты JList в GridBagLayout

StackOverflow https://stackoverflow.com/questions/408989

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Решение 4

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top