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

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

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

  • ResultNumber – Заметное свойство

  • 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;

Похожие темы