Этот пример показывает, как задать прослушиватель для события набора свойств. Коллбэк прослушивателя инициировал, когда значение определенного свойства изменяется. Класс, заданный для этого примера, использует метод для коллбэка кнопки и статический метод для коллбэка прослушивателя. Когда коллбэк кнопки изменяет значение свойства, прослушиватель выполняет свой коллбэк на событии PreSet
.
Этот пример задает класс (PushButton
) с этими элементами дизайна:
Свойство ResultNumber
- Observable
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;