exponenta event banner

Добавление компонентов пользовательского интерфейса в App Designer программным способом

Большинство компонентов пользовательского интерфейса доступны в библиотеке компонентов App Designer для перетаскивания на холст. Иногда может потребоваться программное добавление компонентов в представлении кода. Вот несколько распространенных ситуаций:

  • Создание компонентов, недоступных в библиотеке компонентов. Например, приложение, отображающее диалоговое окно, должно вызвать соответствующую функцию для отображения диалогового окна.

  • Динамическое создание компонентов в соответствии с условиями выполнения.

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

Создание компонента и назначение обратного вызова

Вызовите функцию, создающую компонент из существующего обратного вызова (список функций компонента пользовательского интерфейса см. в разделе Приложения на основе uifigure). StartupFcn обратный вызов - хорошее место для создания компонентов, так как обратный вызов выполняется при запуске приложения. В других случаях можно создать компоненты в рамках другой функции обратного вызова. Например, если требуется отобразить диалоговое окно при нажатии кнопки, вызовите функцию диалогового окна из функции обратного вызова кнопки.

При вызове функции для создания компонента укажите рисунок или один из его дочерних контейнеров в качестве родительского объекта. Например, эта команда создает кнопку и задает фигуру в качестве родительского объекта. В этом случае рисунок имеет имя по умолчанию, которое назначает App Designer (app.UIFigure).

b = uibutton(app.UIFigure);

Затем укажите свойство обратного вызова компонента в качестве дескриптора функции формы @app.callbackname. Например, эта команда устанавливает ButtonPushedFcn свойство кнопки b к функции обратного вызова с именем mybuttonpress.

b.ButtonPushedFcn = @app.mybuttonpress;

Запись обратного вызова

Запишите функцию обратного вызова для компонента как частную вспомогательную функцию. Функция должна иметь app, src, и event в качестве первых трех аргументов. Ниже приведен пример обратного вызова, написанного как частная вспомогательная функция.

methods (Access = private)
    
        function mybuttonpress(app,src,event)
            disp('Have a nice day!');
        end
        
end

Чтобы записать обратный вызов, который принимает дополнительные входные аргументы, укажите дополнительные аргументы после первых трех. Например, этот обратный вызов принимает два дополнительных входа, x и y:

methods (Access = private)
    
        function addxy(app,src,event,x,y)
            disp(x + y);
        end
        
end

Чтобы назначить этот обратный вызов компоненту, укажите свойство обратного вызова компонента как массив ячеек. Первым элементом в массиве ячеек должен быть дескриптор функции. Последующие элементы должны быть дополнительными входными значениями. Например:

b.ButtonPushedFcn = {@app.addxy,10,20};

Пример: диалоговое окно «Подтверждение» с функцией закрытия

В этом приложении показано, как отобразить диалоговое окно подтверждения, которое выполняет обратный вызов при закрытии диалогового окна.

Когда пользователь нажимает кнопку закрытия окна (X), появляется диалоговое окно для подтверждения того, что пользователь хочет закрыть приложение. CloseFcn выполняется обратный вызов.

Пример: Приложение, которое заполняет узлы дерева на основе файла данных

В этом приложении показано, как динамически добавлять узлы дерева во время выполнения. Три узла больницы существуют в дереве до запуска приложения. Однако во время выполнения приложение добавляет несколько дочерних узлов под каждым именем больницы. Количество дочерних узлов и метки на дочерних узлах определяются содержимым patients.xls электронная таблица.

Когда пользователь щелкает имя пациента в дереве, на панели «Информация о пациенте» отображаются такие данные, как возраст, пол и состояние здоровья. Приложение сохраняет изменения данных в массиве таблиц.

Связанные темы