Main Content

グラフィックス コールバックのクラス メソッド

メソッドの参照

通常のクラス メソッドをグラフィックス オブジェクトのコールバックとして使用するには、メソッドを参照する関数ハンドルとしてコールバック プロパティを指定します。たとえば、次のものがあります。

uicontrol('Style','slider','Callback',@obj.sliderCallback)

ここで、クラスは sliderCallback と呼ばれるメソッドを定義し、obj はクラスのインスタンスです。

静的メソッドをコールバックとして使用するには、コールバック プロパティを静的メソッドへの参照を必要とするクラス名が含まれる関数ハンドルとして指定します。

uicontrol('Style','slider','Callback',@MyClass.sliderCallback)

メソッドのコールバックの構文

通常メソッドの場合は、ドット表記を使用して、コールバックを最初の引数として定義するクラスのインスタンスを渡します。

@obj.methodName

次の入力引数を使用してコールバック メソッドを定義します。

  • 最初の引数となる定義クラスのインスタンス

  • イベント ソース ハンドル

  • イベント データ

関数シグネチャは以下の形式になります。

function methodName(obj,src,eventData)
   ...
end

静的メソッドの場合は、必須のクラス名により MATLAB® が指定されたクラスのメソッドへ確実にディスパッチします。

@MyClass.methodName

2 つの入力引数、イベント ソース ハンドルとイベント データを使用して静的コールバック メソッドを定義します。

関数シグネチャは以下の形式になります。

function methodName(src,eventData)

追加の引数の引き渡し

MATLAB により渡されるソースとイベント データ引数だけでなく、別の引数をコールバックに渡す場合は、無名関数を使用することができます。グラフィックス オブジェクトの Callback プロパティに無名関数を割り当てる基本的な構文において、最初の引数はオブジェクトです。

@(src,event)callbackMethod(object,src,eventData,arg1,...argn)

関数シグネチャは以下の形式になります。

function methodName(obj,src,eventData,varargin)
   ...
end

スライダー コールバックに対するクラス メソッドの使用

この例では、ユーザー クラスのメソッドを uicontrol スライダーのコールバックとして使用する方法を示します。

SeaLevelSlider クラスでは、スライダーを作成し、指標付きのイメージの色範囲を変えて、海水面の変化を表します。

クラス定義

SeaLevelSlider を以下のメンバーをもつハンドル クラスとして定義します。

  • このクラス プロパティは、figure と座標軸のハンドルおよび計算された色範囲を格納します。

  • クラス コンストラクターはグラフィックス オブジェクトを作成し、スライダー コールバックを割り当てます。

  • スライダーのコールバック関数は、3 つの必須の引数 (クラスのインスタンス、イベント ソースのハンドル、イベント データ) を受け取ります。イベント データ引数は空であり、使用されません。

  • uicontrol コールバックは、ドット表記を使用して ...'Callback',@obj.sliderCallback のようにコールバック メソッドを参照します。

classdef SeaLevelSlider < handle
   properties
      Figure
      Axes
      CLimit
   end
   
   methods
      function obj = SeaLevelSlider(x,map)
         obj.Figure = figure('Colormap',map,...
            'Position',[100,100,560,580],...
            'Resize','off');
         obj.Axes = axes('DataAspectRatio',[1,1,1],...
            'XLimMode','manual','YLimMode','manual',...
            'Parent',obj.Figure);
         image(x,'CDataMapping','scaled',...
            'Parent',obj.Axes);
         obj.CLimit = get(obj.Axes,'CLim');
         uicontrol('Style','slider',...
            'Parent',obj.Figure,...
            'Max',obj.CLimit(2)-10,...
            'Min',obj.CLimit(1)-1,...
            'Value',obj.CLimit(1),...
            'Units','normalized',...
            'Position',[0.9286,0.1724,0.0357,0.6897],...
            'SliderStep',[0.003,0.005],...
            'Callback',@obj.sliderCallback);
      end
      
      function sliderCallback(obj,src,~)
         minVal = get(src,'Value');
         maxVal = obj.CLimit(2);
         obj.Axes.CLim = [minVal maxVal];
      end
   end
end

SeaLevelAdjuster クラスの使用

このクラスは、MATLAB 製品に付属している cape イメージを使用しています。イメージ データを取得するには、load コマンドを使用します。

load cape X map

データを読み込んだ後、そのイメージの SeaLevelSlider オブジェクトを作成します。

slaObj = SeaLevelSlider(X,map);

スライダーを移動してカラー マッピングを変更し、海水面の上昇を可視化します。

関連するトピック