プロパティ 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;