プロパティ set リスナーの実装
この例では、プロパティ set イベントのリスナーを定義する方法を説明します。特定のプロパティ値が変化すると、リスナー コールバックがトリガーされます。この例で定義されるクラスは、プッシュボタン コールバック用のメソッドとリスナー コールバック用の静的メソッドを使用します。プッシュボタン コールバックがプロパティ値を変更すると、リスナーが PreSet イベント上でコールバックを実行します。
この例では、次の設計要素を指定してクラス (PushButton) を定義します。
ResultNumber– 観察できるプロパティuicontrol
pushbutton– コールバックが実行されるときに新しいグラフを生成するためのプッシュボタン オブジェクト観察できるプロパティで変更に応答するリスナー
PushButton クラスの設計
PushButton クラスは、figure、uicontrol、axes グラフィックス オブジェクトとリスナー オブジェクトをクラス コンストラクターに作成します。
プッシュ ボタンのコールバックはクラス メソッド (名前は pressed) です。プッシュ ボタンがアクティブになると、次のシーケンスが発生します。
MATLAB® が
pressedメソッドを実行します。これにより、新しい一連のデータがグラフに描画され、ResultNumberプロパティがインクリメントされます。ResultNumberプロパティの値を設定しようとするとPreSetイベントがトリガーされ、それにより、リスナー コールバックが実行されてからプロパティ値が設定されます。リスナー コールバックは、イベント データを使ってコールバック オブジェクトのハンドル (
PushButtonクラスのインスタンス) を取得し、AxHandleプロパティに保存される Axes オブジェクトのハンドルを提供します。リスナー コールバックは 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;
