Main Content

オブジェクト配列表示のカスタマイズ

目的

非スカラー オブジェクト (空のオブジェクト配列を含む) の表示をカスタマイズします。

カスタム表示の設計

メモ

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

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

  • 既定のヘッダーの要素をいくつか使用して、カスタム ヘッダーを作成する。

  • 配列内の各オブジェクトについて、プロパティ固有の情報のサブセットを表示する。

  • ハンドル オブジェクトとクラスのドキュメンテーションへのリンクを伴う char ベクトルを使用して、配列内にある削除されたオブジェクトへのハンドルをリストする。

  • 既定のヘッダーがわずかに変更された空のオブジェクトを表示する。

以下に示すのは、3 つの EmployeeInfo オブジェクトからなる配列のカスタマイズされた表示です。

1x3 EmployeeInfo array with members:
1. Employee:
          Name: 'Bill Tork'
    Department: 'Product Development'

2. Employee:
          Name: 'Alice Blackwell'
    Department: 'QE'

3. Employee:
          Name: 'Nancy Green'
    Department: 'Documentation'

配列内にある削除されたオブジェクトのハンドルは、オブジェクトの状態を示します。

1x3 EmployeeInfo members:

1. Employee:
          Name: 'Bill Tork'
    Department: 'Product Development'

2. handle to deleted EmployeeInfo

3. Employee:
          Name: 'Nancy Green'
    Department: 'Documentation'

目的の結果を得るために、EmployeeInfo クラスは、以下に示す matlab.mixin.CustomDisplay クラスのメソッドをオーバーライドします。

  • displayNonScalarObject — 空ではないオブジェクト配列を表示するために呼び出される

  • displayEmptyObject — 空のオブジェクト配列を表示するために呼び出される

displayNonScalarObject のオーバーライド

MATLAB®displayNonScalarObject メソッドを呼び出してオブジェクト配列を表示します。EmployeeInfo クラスでのこのメソッドのオーバーライドにより、以下が実行されます。

  • 配列のサイズを取得する convertDimensionsToString と、クラス名およびそのクラスのヘルプへのリンクを取得する getClassNameForHeader を使用して、ヘッダー テキストを作成する。

  • 変更されたヘッダー テキストを表示する。

  • 配列内の要素を順にループして、個々のオブジェクトの状態に合わせて 2 つの異なるサブヘッダーを作成する。このループで、このメソッドは以下を実行します。

    • 削除されたオブジェクトへのハンドルを検出する (isvalid ハンドル クラス メソッドを使用)。getDeletedHandleTextgetClassNameForHeader を使用して、削除されたオブジェクトへのハンドルである配列要素のテキストを作成する。

    • 配列内の有効なオブジェクト要素に対して、カスタム サブヘッダーを作成する。

  • 有効な objectsName プロパティと Department プロパティを含む PropertyGroup オブジェクトを作成する。

  • displayPropertyGroups 静的メソッドを使用して、有効なオブジェクトのプロパティ表示を生成する。

以下に、displayNonScalarObjects の実装を示します。

methods (Access = protected)
   function displayNonScalarObject(objAry)
      dimStr = matlab.mixin.CustomDisplay.convertDimensionsToString(objAry);
      cName = matlab.mixin.CustomDisplay.getClassNameForHeader(objAry);
      headerStr = [dimStr,' ',cName,' members:'];
      header = sprintf('%s\n',headerStr);
      disp(header)
      for ix = 1:length(objAry)
         o = objAry(ix);
         if ~isvalid(o)
            str1 = matlab.mixin.CustomDisplay.getDeletedHandleText;
            str2 = matlab.mixin.CustomDisplay.getClassNameForHeader(o);
            headerInv = [str1,' ',str2];
            tmpStr = [num2str(ix),'. ',headerInv];
            numStr = sprintf('%s\n',tmpStr);
            disp(numStr)
         else
            numStr = [num2str(ix),'. Employee:'];
            disp(numStr)
            propList = struct('Name',o.Name,...
               'Department',o.Department);
            propgrp = matlab.mixin.util.PropertyGroup(propList);
            matlab.mixin.CustomDisplay.displayPropertyGroups(o,propgrp);
         end
      end
   end
end

displayEmptyObject のオーバーライド

MATLAB は displayEmptyObject メソッドを呼び出して空のオブジェクト配列を表示します。EmployeeInfo クラスでのこのメソッドの実装により、以下のステップに従って空のオブジェクト用のカスタム ヘッダーが作成されます。

  • convertDimensionsToString 静的メソッドを使用して、配列の次元を文字形式で取得する。

  • getClassNameForHeader 静的メソッドを使用して、関数 helpPopup にリンクされたクラス名をもつテキストを取得する。

  • 空の配列に対し、カスタム テキストを作成して表示する。

methods (Access = protected)
   function displayEmptyObject(obj)
      dimstr = matlab.mixin.CustomDisplay.convertDimensionsToString(obj);
      className = matlab.mixin.CustomDisplay.getClassNameForHeader(obj);
      emptyHeader = [dimstr,' ',className,' with no employee information'];
      header = sprintf('%s\n',emptyHeader);
      disp(header)
   end
end

たとえば、空の EmployeeInfo オブジェクトの表示は次のようになります。

Empt = EmployeeInfo.empty(0,5)

Empt = 

0x5 EmployeeInfo with no employee information

 完全なクラスのリスト

関連するトピック