Иногда вам может понадобиться создать массив однотипных элементов управления, например, для того, чтобы иметь возможность изменять его во время выполнения модели. Используя реплицированные элементы управления AnyLogic, вы можете сэкономить время, которое затрачивается на рисование элементов, а также сделать вашу модель масштабируемой. В этом примере мы создадим реплицированную кнопку и будем с ее помощью изменять цвет заливки реплицированной фигуры. Более того, мы будем динамически управлять количеством копий кнопки и фигуры с помощью бегунка.
Демо-модель: Replicated Button Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.
Чтобы создать такую модель
- Создайте четыре элемента, как показано на рисунке: бегунок, переменную, кнопку и скругленный прямоугольник.
- Переименуйте переменную в N, смените ее тип на целочисленный (int), а в качестве начального значения задайте 3.
- Свяжите бегунок с переменной N и задайте его минимальное и максимальное значения равными 1 и 9 соответственно.
-
Задайте для скругленного прямоугольника следующие динамические свойства:
Количество: N
Y: 100 + 50 * index -
Задайте для кнопки следующие динамические свойства:
Количество: N
Y: 100 + 50 * index
Метка: "Paint shape " + index -
На странице свойств кнопки Основные задайте Действие:
roundRectangle.get( index ).setFillColor( blueViolet ); - Запустите модель. Переместите бегунок и понажимайте кнопки.
Как вы можете видеть, количество кнопок меняется согласно тому, как бегунок изменяет значение переменной N. С помощью номера копии кнопки, доступного в поле Действие как переменная index, вы можете производить разные действия с различными кнопками. В нашем случае мы изменяем цвет фигуры, чей номер равен номеру кнопки. Метка кнопки также зависит от ее номера.
Вам может потребоваться реплицировать элементы Текст — надписи, связанные с реплицированными элементами управления.
Предположим, в вашей модели имеется элемент Бегунок, текущее значение которого выводится в элементе Текст. Для обоих этих элементов указано одинаковое Количество в секции свойств Внешний вид.
Допустим, в качестве динамического значения элемента Текст используется следующая функция:
slider.get( index ).getValue()
При попытке запустить модель появится ошибка "Index out of bounds", поскольку реплицированные копии бегунка еще не были добавлены в модель, но копии элемента Текст уже пытаются к ним обратиться.
Для решения проблемы можно вызвать функцию создания копий бегунка вручную, добавив следующую строчку в поле При запуске секции Действия агента свойств агента верхнего уровня:
slider.createShapes();
-
Как мы можем улучшить эту статью?
-