В этом примере показано, как определить прослушиватель для события набора свойств. Обратный вызов прослушивателя запускается при изменении значения определенного свойства. Класс, определенный для этого примера, использует метод для обратного вызова нажатием кнопки и статический метод для обратного вызова прослушивателя. Когда обратный вызов нажатием кнопки изменяет значение свойства, прослушиватель выполняет обратный вызов на PreSet событие.
В этом примере определяется класс (PushButton) с этими элементами конструкции:
ResultNumber - Наблюдаемое свойство
uicontrol pushbutton - Кнопочный объект, используемый для создания нового графа при выполнении обратного вызова
Прослушиватель, реагирующий на изменение наблюдаемого свойства
PushButton класс создает figure, uicontrol, axes графические объекты и объект прослушивателя в конструкторе класса.
Обратный вызов кнопки является методом класса (с именем pressed). При активации кнопки происходит следующая последовательность:
MATLAB ® выполняет команду pressed , который строит график нового набора данных и увеличивает ResultNumber собственность.
Попытка установить значение ResultNumber свойство запускает PreSet событие, которое выполняет обратный вызов прослушивателя перед установкой значения свойства.
Обратный вызов прослушивателя использует данные события для получения дескриптора объекта обратного вызова (экземпляра PushButton класс), который затем предоставляет дескриптор объекта осей, который хранится в его AxHandle собственность.
Обратный вызов прослушивателя обновляет оси Title после завершения выполнения обратного вызова MATLAB устанавливает 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;
