Ориентированный на столбцы макет для компонента в JScrollPane - PullRequest
2 голосов
/ 03 февраля 2012

Я работаю над своим первым приложением Swing, и у меня возникла проблема с макетом относительно диалогового окна, которое я создал для своих пользователей, чтобы вводить значения в определенные поля.Поскольку количество отображаемых полей варьируется в зависимости от выбора пользователя, я использую JScrollPane в своем диалоговом окне, настраивая его область просмотра на панель, к которой я добавляю свои компоненты поля.

Для каждого отображаемого поля я создаю и добавляю три компонента:

  1. метка "имя поля"
  2. Компонент поля (обычно это JTextField, но такжеможет быть элементом управления JComboBox или JDateChooser)
  3. метка "тип поля"

т.е.

метка имени: | _ __ _ |(Строка)

name2label: | __ |(Число)

Все три из этих компонентов могут иметь различную длину, поэтому моей задачей было найти аккуратный способ размещения этих компонентов.То, что я делал, - это установил менеджер раскладки для главной панели в BoxLayout, который использует ось Y (т.е. он размещает компоненты вертикально).Затем я создаю панель для каждого поля, устанавливаю менеджер макета для этой панели, затем добавляю все три компонента поля в эту панель.Я пробовал и FlowLayout, и BoxLayout для отдельных панелей, и у меня были проблемы с обоими этими менеджерами компоновки.

Я настроил диспетчер FlowLayout для использования выравнивания по левому краю, но из-за разной длины компонентов это привело к компоновке с изогнутыми столбцами.Я установил BoxLayout для использования оси X (то есть выложил все по горизонтали), но последующее центрирование компонентов привело к огромному расстоянию между каждым компонентом.И до использования отдельных панелей я пытался использовать GridLayout, но мне так и не удалось заставить его выполнить мое требование в три столбца, в результате чего поля были разбиты по строкам.Я также кратко посмотрел на статью о менеджере GroupLayout, но она казалась пугающей:)

Есть ли у кого-нибудь какие-либо предложения о том, как расположить разное количество строк из трех компонентов разной длины в JScrollPane аккуратно,компактный способ?Заранее спасибо ...

Шелдон Р.

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

Это общая проблема: MiGLayout - хороший выбор. В качестве альтернативы, BoxLayout показано здесь , и Group Layout показано здесь .

1 голос
/ 04 февраля 2012

Обновление: моя идея с тремя столбцами не сработала по той же причине, по которой большинство других моих идей не сработало, т.е. BoxLayout, как и большинство менеджеров компоновки, имеет тенденцию расширять компонент, чтобы заполнить столько места, сколько онможет, поэтому мои поля отображались как огромные :)

Так что я укусил пулю и попытался выяснить GroupLayout, основываясь на примере, показанном @trashgod, похожим на то, чего я пытался достичь.После выяснения того, как сделать то, что я хотел, способом GroupLayout, я сначала столкнулся с той же проблемой расширения поля.Затем в руководстве Oracle GroupLayout было показано, как предотвратить изменение размеров компонентов, т.е. с помощью версии addcomponent с четырьмя аргументами: addComponent (field, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZ)попробовал это, и это работало как очарование.Еще раз спасибо, @trashcan, за то, что направили меня в правильном направлении, и спасибо всем, кто поделился идеями ...

Шелдон Р.

1 голос
/ 03 февраля 2012

Также взгляните на SpringLayout .

...