/ / Java Swing: не може розповсюджувати компоненти в цілому JPanel за допомогою GridBagLayout - java, swing, jpanel, макет-менеджер, gridbaglayout

Java Swing: не може розповсюджувати компоненти у всьому JPanel за допомогою GridBagLayout - java, swing, jpanel, layout-manager, gridbaglayout

Я намагаюся втілити простий JDialog кудиверхній JPanel має GridBagLayout, який складається з 5 пар JLabels: з кожної пари, перший JLabel діє як заголовок, а другий містить дані, отримані від виклику веб-служби. Ось приклад:

введіть опис зображення тут

Як бачите, це вікно занадто "порожнє" сзанадто багато місця. Перш за все я не можу зрозуміти, чому верхня панель настільки більша, ніж друга. Фактично, JPanel із заголовком "Risultato" також має GridBagLayout, тоді як перша панель знаходиться у колонці 0 та рядку 0, друга панель - у колонці 0 та рядку 1.

Потім для кожного JLabel я називаю такі методи: setMinimumSize (новий вимір (231, 25)) setPreferredSize (новий вимір (231, 25)) setMaximumSize (новий вимір (231, 25))

Більше того, я встановлюю якіри для кожного GridBagConstraints, пов'язаного з кожним JLabel, як:

  • GridBagConstraints.FIRST_LINE_START для червоного;
  • GridBagConstraints.CENTER для зеленого;
  • GridBagConstraints.LINE_START для апельсина;
  • GridBagConstraints.LINE_END для жовтого;
  • GridBagConstraints.LAST_LINE_START для синього;
  • GridBagConstraints.LAST_LINE_END для білого;

Нарешті я також дзвоню setWeightX(1.0); за кожне обмеження. Я не знаю, чому ефект такий, і чому так багато порожнього місця перед і після всіх JLabels. Чи є спосіб це виправити? Так що верхня панель адаптується до всього її компонента? Я не можу писати жодного коду Java, оскільки моя команда розробників змушена використовувати дивні внутрішні рамки, де ми будуємо макет, записуючи XML-файл, де кожен тег є контейнером або компонентом з правильним ступенем вкладеності, а потім, API Reflection, справжній Класи та методи Java інстанціюються та називаються. У будь-якому випадку механізм повинен бути однаковим.

UPDATE

Велике спасибі Кевіну Андерсону та мені вдалося покращити макет JDialog значно. Більше того, я зателефонував setWeightY(0.0) за GridBagConstraints на контейнері верхньої панелі, щоб він також не став занадто великим, і він змінив розмір компонентів, що містяться в ньому.

введіть опис зображення тут

Відповіді:

1 для відповіді № 1

Ваші мітки у двох стовпцях, і всі вони єрівний weightX, тому GridBagLayout виділяє приблизно однакову ширину обом стовпцям. Але якщо ви надаєте більшу вагуX, скажімо, 10,0, міткам у другому стовпчику, змусьте другий стовпчик зайняти порівняно набагато більше місця, ніж перший. Ви отримаєте менше місця між стовпцями та більше в крайній правій частині панелі.