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

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

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

  • ResultNumber - Свойство наблюдаемого

  • uicontrol pushbutton - Объект кнопки для генерации нового графика при выполнении обратного коллбэка

  • Прослушиватель, которая реагирует на изменение наблюдаемого свойства

Проект класса PushButton

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

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

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

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

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

  4. Прослушиватель коллбэка обновляет оси Title свойство, после завершения обратного коллбэка выполнение устанавливает 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;

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте