Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Динамическое построение GUI

#java #swing


Здравствуйте! Не знаю, правильно ли я подобрал термин "динамическое построение",
но суть вот в чём.

Необходимо реализовать метод, который бы через цикл выводил компоненты различных
типов в определённом порядке. Скажем, сначала идут 3 JTextField (Имя, Фамилия, Отчество)
- потом два JComboBox (Пол, Страна) и дальше другие текстовые поля. Метка и текстовое
поле (или список) заворачиваются в JPanel. Каждой метке присваивается имя и текст.
Текстовому полю или списку присваивается имя.



Для начала, я думаю, нужно где то сохранить имена меток и текстовых полей. А также
текст меток:

Multimap labels;
List componentsName;
List componentsList //список выводимых компонентов: "JTextField","JTextField","JComboBox"
etc.. 

public void drawComponents(Multimap labels, List componentsName,
List componentsList ) {
            /*do something*/
        }


Как создать красивый цикл перебора элементов и вывести компоненты на форму?
    


Ответы

Ответ 1



Предложу вам такой вариант: создайте класс описывающий этап(сократите с 3х коллекций до одной мапы). Он будет содержать поля описывающие каждый этап (имя + элемент который надо создать + можно добавить поле для результата) занести в мапу номер этапа - ключ, объект этапа - значение в цикле по индексу этапа вытаскивать объект из мапы, инициализировать все элементы (label, JTextField ...), сделать их видимыми ждать ввода от пользователя, нажатия кнопки "далее", заносить результат ввода в объект этапа делать невидимыми все элементы GUI. По итогу вы получите мапу, со всеми этапами + результатами ввода на этих этапах.

Ответ 2



Думаю, можно попробовать просто показывать компоненты по очереди - объявляешь все, потом задаёшь размеры и свойства, а при добавлении на форму дописываешь component.setVisible(false); где component - интересующий компонент. Потом, в конце каждой проверки, если данные верны - вызываешь у всех предыдущих компонентов component.setVisible(false), а у следующих - component.setVisible(true)

Комментариев нет:

Отправить комментарий