В этом примере показано, как задать прослушиватель для события набора свойств. Прослушиватель коллбэка запускается, когда изменяется значение определенного свойства. Класс, заданный для этого примера, использует метод для кнопочного коллбэка и статический метод для обратного коллбэка прослушивателя. Когда кнопочный коллбэк изменяет значение свойства, прослушиватель выполняет его коллбэк на PreSet
событие.
Этот пример задает класс (PushButton
) с этими элементами проекта:
ResultNumber
- Свойство наблюдаемого
uicontrol pushbutton
- Объект кнопки для генерации нового графика при выполнении обратного коллбэка
Прослушиватель, которая реагирует на изменение наблюдаемого свойства
The PushButton
класс создает figure
, uicontrol
, axes
графические объекты и объект прослушивателя в конструкторе классов.
Коллбэк кнопки - это метод класса (с именем pressed
). Когда кнопка активирована, происходит следующая последовательность:
MATLAB® выполняет pressed
метод, который графически отображает новый набор данных и увеличивает ResultNumber
свойство.
Попытка задать значение ResultNumber
свойство запускает PreSet
событие, которое выполняет коллбэк прослушивателя перед установкой значения свойства.
Прослушиватель коллбэка использует данные о событиях, чтобы получить указатель на объект коллбэка (образец из PushButton
класс), который затем предоставляет указатель на объект осей, который хранится в его AxHandle
свойство.
Прослушиватель коллбэка обновляет оси Title
свойство, после завершения обратного коллбэка выполнение устанавливает ResultsNumber
свойство своему новому значению.
classdef PushButton < handle properties (SetObservable) ResultNumber = 1 end properties AxHandle end methods function buttonObj = PushButton myFig = figure; buttonObj.AxHandle = axes('Parent',myFig); uicontrol('Parent',myFig,... 'Style','pushbutton',... 'String','Plot Data',... 'Callback',@(src,evnt)pressed(buttonObj)); addlistener(buttonObj,'ResultNumber','PreSet',... @PushButton.updateTitle); end end methods function pressed(obj) scatter(obj.AxHandle,randn(1,20),randn(1,20),'p') obj.ResultNumber = obj.ResultNumber + 1; end end methods (Static) function updateTitle(~,eventData) h = eventData.AffectedObject; set(get(h.AxHandle,'Title'),'String',['Result Number: ',... num2str(h.ResultNumber)]) end end end
График рассеяния выглядит аналогично этому графику после трех нажатий кнопки мыши.
buttonObj = PushButton;