Реализация прослушивателя набора свойств

Этот пример показывает, как задать прослушиватель для события набора свойств. Коллбэк прослушивателя инициировал, когда значение определенного свойства изменяется. Класс, заданный для этого примера, использует метод для коллбэка кнопки и статический метод для коллбэка прослушивателя. Когда коллбэк кнопки изменяет значение свойства, прослушиватель выполняет свой коллбэк на событии PreSet.

Этот пример задает класс (PushButton) с этими элементами дизайна:

  • Свойство ResultNumber - Observable

  • uicontrol pushbutton – объект Кнопки раньше генерировал новый график, когда его коллбэк выполняется

  • Прослушиватель, который отвечает на изменение в заметном свойстве

Дизайн класса PushButton

Класс PushButton создает figure, uicontrol, графические объекты axes и объект прослушивателя в конструкторе класса.

Коллбэк кнопки является методом класса (названный pressed). Когда кнопка активируется, следующая последовательность происходит:

  1. MATLAB® выполняет метод pressed, который изображает новый набор в виде графика данных и постепенно увеличивает свойство ResultNumber.

  2. Попытка установить значение свойства ResultNumber инициировала событие PreSet, которое выполняет коллбэк прослушивателя прежде, чем установить значение свойства.

  3. Коллбэк прослушивателя использует данные о событиях, чтобы получить указатель объекта коллбэка (экземпляр класса PushButton), который затем обеспечивает указатель объекта осей, который хранится в его свойстве AxHandle.

  4. Коллбэк прослушивателя обновляет свойство 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;

Похожие темы