Main Content

ヘッダー、プロパティ リスト、フッターのカスタマイズ

目的

表示の 3 つの部分であるヘッダー、プロパティ グループ、フッターのそれぞれをカスタマイズします。

カスタム表示の設計

メモ

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

ヘッダー:

  • 非スカラー オブジェクト配列用の既定のヘッダーを使用する。

  • クラス名と部門名 (Department プロパティから) がリンクされたヘッダー テキストを作成する。

プロパティ:

  • 非スカラー オブジェクト配列では、既定とは異なる順序でプロパティ名のサブセットを表示する。

  • スカラー オブジェクトでは、タイトルをもつ 2 つのプロパティ グループ (Public InfoPersonal Info) を作成する。

フッター:

  • オブジェクトがプロパティ値を表示する有効なスカラーである場合にのみ、フッターを表示に追加する。

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

Emp123 = 

EmployeeInfo Dept: Product Development

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

   Personal Info
      Salary: 1000
    Password: 'bill123'

Company Private

次に示すのは、EmployeeInfo オブジェクト配列のカスタム表示です。

[Emp123,Emp124]

ans = 

  1x2 EmployeeInfo array with properties:

    Department
    Name
    JobTitle

次に示すのは、空のオブジェクト配列の表示です。

>> EmployeeInfo.empty(0,5)

ans = 

  0x5 EmployeeInfo array with properties:

    Department
    Name
    JobTitle

次に示すのは、削除されたオブジェクトへのハンドルの表示です (EmployeeInfo はハンドル クラス)。

>> delete(Emp123)
>> Emp123

Emp123 = 

  handle to deleted EmployeeInfo

実装

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

各メソッドは、以下の各入力を用いて目的の結果を出力しなければなりません。

  • スカラー オブジェクト

  • 非スカラー オブジェクト配列

  • 空のオブジェクト配列

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

MATLAB®getHeader を呼び出してヘッダー テキストを取得します。EmployeeInfo クラスはこのメソッドをオーバーライドし、スカラーの表示用のカスタム ヘッダーを実装します。その動作は以下のとおりです。

  • 非スカラー (空のオブジェクトを含む) 配列はスーパークラス getHeader を呼び出し、これによって既定のヘッダーが返されます。

  • 削除されたオブジェクトへのスカラー ハンドルは、getHeader を呼び出しません。

  • スカラー入力は、getClassNameForHeader 静的メソッドを使用してカスタム ヘッダーを作成し、リンク付きのクラス名テキストと Department プロパティの値を返します。

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

methods (Access = protected)
   function header = getHeader(obj)
      if ~isscalar(obj)
         header = getHeader@matlab.mixin.CustomDisplay(obj);
      else
         className = matlab.mixin.CustomDisplay.getClassNameForHeader(obj);
         newHeader = [className,' Dept: ',obj.Department];
         header = sprintf('%s\n',newHeader);
      end
   end
end

getPropertyGroups のオーバーライド

MATLAB は getPropertyGroups を呼び出して、プロパティの表示方法を制御する PropertyGroup オブジェクトを取得します。このメソッドのオーバーライドでは、オブジェクトの状態次第で 2 つの異なるプロパティ リストが定義されます。

  • 非スカラー入力 (空の配列や、削除されたオブジェクトへのハンドルからなる配列を含む) の場合、プロパティ リストを cell 配列として作成し、プロパティを並べ替えます。

    既定では、MATLAB は非スカラー入力のプロパティ値を表示しません。

  • スカラー入力の場合、タイトルをもつプロパティ グループを 2 つ作成します。スカラー コード分岐は、非スカラーとは異なる順序でプロパティをリストするため、SalaryPassword のプロパティを含めます。MATLAB は自動的にプロパティ値を代入します。

  • 削除されたオブジェクトへのスカラー ハンドルは、getPropertyGroups を呼び出しません。

両方の分岐は、オブジェクト プロパティの表示方法を決定する matlab.mixin.util.PropertyGroup オブジェクトを返します。

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

methods (Access = protected)
   function propgrp = getPropertyGroups(obj)
      if ~isscalar(obj)
         propList = {'Department','Name','JobTitle'};
         propgrp = matlab.mixin.util.PropertyGroup(propList);
      else
         gTitle1 = 'Public Info';
         gTitle2 = 'Personal Info';
         propList1 = {'Name','JobTitle'};
         propList2 = {'Salary','Password'};
         propgrp(1) = matlab.mixin.util.PropertyGroup(propList1,gTitle1);
         propgrp(2) = matlab.mixin.util.PropertyGroup(propList2,gTitle2);
      end
   end
end

getFooter のオーバーライド

MATLAB は getFooter を呼び出してフッター テキストを取得します。EmployeeInfogetFooter メソッドは表示用のフッターを定義します。このフッターは、入力が有効なスカラー オブジェクトである場合にのみ含められます。その他すべての場合において、getFooter は空の char ベクトルを返します。

削除されたオブジェクトへのスカラー ハンドルは、getFooter を呼び出しません。

methods (Access = protected)
   function footer = getFooter(obj)
      if isscalar(obj)
         footer = sprintf('%s\n','Company Private');
      else
         footer = '';
      end
   end
end

 完全なクラスのリスト

関連するトピック