exponenta event banner

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

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

В этом примере определяется класс (PushButton) с этими элементами конструкции:

  • ResultNumber - Наблюдаемое свойство

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

Связанные темы