Я работаю над своим первым приложением Swing, и у меня возникла проблема с макетом относительно диалогового окна, которое я создал для своих пользователей, чтобы вводить значения в определенные поля.Поскольку количество отображаемых полей варьируется в зависимости от выбора пользователя, я использую JScrollPane в своем диалоговом окне, настраивая его область просмотра на панель, к которой я добавляю свои компоненты поля.
Для каждого отображаемого поля я создаю и добавляю три компонента:
- метка "имя поля"
- Компонент поля (обычно это JTextField, но такжеможет быть элементом управления JComboBox или JDateChooser)
- метка "тип поля"
т.е.
метка имени: | _ __ _ |(Строка)
name2label: | __ |(Число)
Все три из этих компонентов могут иметь различную длину, поэтому моей задачей было найти аккуратный способ размещения этих компонентов.То, что я делал, - это установил менеджер раскладки для главной панели в BoxLayout, который использует ось Y (т.е. он размещает компоненты вертикально).Затем я создаю панель для каждого поля, устанавливаю менеджер макета для этой панели, затем добавляю все три компонента поля в эту панель.Я пробовал и FlowLayout, и BoxLayout для отдельных панелей, и у меня были проблемы с обоими этими менеджерами компоновки.
Я настроил диспетчер FlowLayout для использования выравнивания по левому краю, но из-за разной длины компонентов это привело к компоновке с изогнутыми столбцами.Я установил BoxLayout для использования оси X (то есть выложил все по горизонтали), но последующее центрирование компонентов привело к огромному расстоянию между каждым компонентом.И до использования отдельных панелей я пытался использовать GridLayout, но мне так и не удалось заставить его выполнить мое требование в три столбца, в результате чего поля были разбиты по строкам.Я также кратко посмотрел на статью о менеджере GroupLayout, но она казалась пугающей:)
Есть ли у кого-нибудь какие-либо предложения о том, как расположить разное количество строк из трех компонентов разной длины в JScrollPane аккуратно,компактный способ?Заранее спасибо ...
Шелдон Р.