Main Content

プロパティ set リスナーの実装

この例では、プロパティ set イベントのリスナーを定義する方法を説明します。特定のプロパティ値が変化すると、リスナー コールバックがトリガーされます。この例で定義されるクラスは、プッシュボタン コールバック用のメソッドとリスナー コールバック用の静的メソッドを使用します。プッシュボタン コールバックがプロパティ値を変更すると、リスナーが PreSet イベント上でコールバックを実行します。

この例では、次の設計要素を指定してクラス (PushButton) を定義します。

  • ResultNumber – 観察できるプロパティ

  • uicontrol pushbutton – コールバックが実行されるときに新しいグラフを生成するためのプッシュボタン オブジェクト

  • 観察できるプロパティで変更に応答するリスナー

PushButton クラスの設計

PushButton クラスは、figureuicontrolaxes グラフィックス オブジェクトとリスナー オブジェクトをクラス コンストラクターに作成します。

プッシュ ボタンのコールバックはクラス メソッド (名前は pressed) です。プッシュ ボタンがアクティブになると、次のシーケンスが発生します。

  1. MATLAB®pressed メソッドを実行します。これにより、新しい一連のデータがグラフに描画され、ResultNumber プロパティがインクリメントされます。

  2. ResultNumber プロパティの値を設定しようとすると PreSet イベントがトリガーされ、それにより、リスナー コールバックが実行されてからプロパティ値が設定されます。

  3. リスナー コールバックは、イベント データを使ってコールバック オブジェクトのハンドル (PushButton クラスのインスタンス) を取得し、AxHandle プロパティに保存される Axes オブジェクトのハンドルを提供します。

  4. リスナー コールバックは Axes 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

散布図は、プッシュボタンを 3 回クリックした後、おおよそ次のグラフのようになります。

buttonObj = PushButton;

関連するトピック