Main Content

スカラー オブジェクトの表示のカスタマイズ

目的

スカラー オブジェクトの表示をカスタマイズします。

カスタム表示の設計

メモ

この例では、既定のオブジェクト表示をもつクラス節で説明されている EmployeeInfo クラスを使用します。

このカスタム表示の目的は以下のとおりです。

  • Department プロパティから取得した部門名を含めるようにヘッダーを変更する。

  • Public InfoPersonal Info のタイトルをもつ 2 つのカテゴリにプロパティをグループ化する。

  • 表示するプロパティを変更する。

  • Personal Info カテゴリに表示される値を変更する。

  • 非スカラー オブジェクト (空の配列や削除されたスカラーのハンドルを含む) に対しては既定の表示を使用する。

たとえば、次に示すのは、EmployeeInfo クラスのオブジェクトのカスタム表示です。

Emp123 = 

EmployeeInfo Dept: Product Development

   Public Info
        Name: 'Bill Tork'
    JobTitle: 'Software Engineer'

   Personal Info
      Salary: 'Level: 10'
    Password: '*******'

実装

EmployeeInfo クラスは、2 つの matlab.mixin.CustomDisplay メソッドをオーバーライドして、以下で示される表示を実装します。

displayScalarObject メソッドのオーバーライド

MATLAB®displayScalarObject を呼び出してスカラー オブジェクトを表示します。EmployeeInfo クラスはこのメソッドをオーバーライドし、スカラーの表示を実装します。オーバーライドの後このメソッドは、ヘッダー、プロパティ グループ、フッター (使用する場合) の作成などを含む、スカラー オブジェクトの表示に関するすべての側面を制御しなければなりません。

この実装により、以下が実行されます。

  • getClassNameForHeader 静的メソッドを使用してカスタム ヘッダーを作成し、リンク付きのクラス名テキストと、部門名を取得するために Department プロパティの値を返す。

  • sprintf を使用して、ヘッダー テキストに新しい行を 1 行追加する。

  • 組み込み disp 関数を用いてヘッダーを表示する。

  • getPropertyGroups オーバーライドを呼び出してプロパティ グループを定義する (次節を参照)。

  • displayPropertyGroups 静的メソッドを使用してプロパティ グループを表示する。

以下に、EmployeeInfo による displayScalarObject メソッドのオーバーライドを示します。必要な保護されたアクセスは、スーパークラスから継承されます。

methods (Access = protected)
   function displayScalarObject(obj)
      className = matlab.mixin.CustomDisplay.getClassNameForHeader(obj);
      scalarHeader = [className,' Dept: ',obj.Department];
      header = sprintf('%s\n',scalarHeader);
      disp(header)
      propgroup = getPropertyGroups(obj);
      matlab.mixin.CustomDisplay.displayPropertyGroups(obj,propgroup)
   end
end

getPropertyGroups のオーバーライド

MATLAB は、スカラーまたは非スカラーのオブジェクトを表示する際に getPropertyGroups を呼び出します。しかし、MATLAB は、削除されたオブジェクトのスカラー ハンドルを表示するときにはこのメソッドを呼び出しません。

EmployeeInfo クラスはこのメソッドをオーバーライドし、スカラー オブジェクトの表示用のプロパティ グループを実装します。

この実装は、入力がスカラーではない場合、スーパークラス getPropertyGroups メソッドを呼び出します。入力がスカラーの場合、このメソッドにより以下が実行されます。

  • 2 つのグループに 2 つのタイトルを定義する。

  • 最初のグループに含まれるプロパティ名の cell 配列を作成する。MATLAB により、表示用のプロパティ値が追加されます。

  • 2 番目のグループのプロパティ名と関連付けられたプロパティ値からなる struct 配列を作成する。cell 配列の代わりに struct を使用することにより、オブジェクト プロパティに格納された個人情報を変更することなく、SalaryPassword のプロパティに表示される値を置き換えることができます。

  • displayScalarObject メソッドで使用される 2 つの matlab.mixin.util.PropertyGroup オブジェクトを作成する。

以下に、EmployeeInfo による getPropertyGroups メソッドのオーバーライドを示します。必要な保護されたアクセスは、スーパークラスから継承されます。

methods (Access = protected)
   function propgrp = getPropertyGroups(obj)
      if ~isscalar(obj)
         propgrp = getPropertyGroups@matlab.mixin.CustomDisplay(obj);
      else
         gTitle1 = 'Public Info';
         gTitle2 = 'Personal Info';
         propList1 = {'Name','JobTitle'};
         pd(1:length(obj.Password)) = '*';
         level = round(obj.Salary/100);
         propList2 = struct('Salary',...
            ['Level: ',num2str(level)],...
            'Password',pd);
         propgrp(1) = matlab.mixin.util.PropertyGroup(propList1,gTitle1);
         propgrp(2) = matlab.mixin.util.PropertyGroup(propList2,gTitle2);
      end
   end
end

 完全なクラスのリスト

関連するトピック