AnyLogic - динамическое создание объектов во время моделирования

Можно ли динамически создавать объекты или изменять их во время выполнения? Например, при нажатии кнопки создается другая кнопка или изменяется количество линий дороги? Когда я пишу этот код для кнопки Action, во время выполнения

road123.setBackwardLanesCount(3);

Я получаю сообщение об ошибке ниже:

root: road123: элемент разметки уже инициирован и не может быть изменен. используйте конструктор без аргументов, выполните настройку и, наконец, вызовите initialize () .function


person M.ah    schedule 04.09.2016    source источник
comment
не могли бы вы предоставить немного больше информации о своем коде? какой класс obj является road123? как вы пытаетесь добавить / удалить кнопку / строки   -  person Nikolaj Klitlund Børty    schedule 05.09.2016
comment
road123 - это объект Road.   -  person M.ah    schedule 05.09.2016
comment
ну, сложно создать объект в коде, а затем динамически добавить его в графический интерфейс. Вы должны добавить его в механизм выполнения anylogic. Самый простой способ - создать нужные вам объекты, а затем скрыть те, которые вам не нужны, с помощью button.setvisible (false). Если, однако, это не вариант. Мой лучший совет - создать боттон, а затем заглянуть в код anylogic для основного, чтобы увидеть, как он создается и добавляется.   -  person Nikolaj Klitlund Børty    schedule 07.09.2016


Ответы (1)


Вы получите эту ошибку с любым объектом, который пытаетесь создать во время выполнения с помощью параметризованного конструктора. Если вы создадите объект с помощью простого конструктора (просто «()»), а затем установите все параметры по отдельности, вы не столкнетесь с этой проблемой. Проверьте Anylogic API для получения конкретной информации об используемом вами объекте, потому что некоторые требуют, чтобы вы вызывали .initiliaze () для этого объекта после установки всех его параметров, если вы создали его с помощью простого конструктора. Кроме того, если вы хотите добавить объект на экран во время выполнения, вам необходимо добавить этот код в функцию, которая его создает:

@Override
public void onDraw( Panel panel, Graphics2D graphics) {
    obj.drawModel(panel, graphics, true);
}

где obj заменяется именем объекта, который вы создали динамически.

person user3303925    schedule 19.10.2016