スカラー オブジェクトの表示のカスタマイズ
目的
スカラー オブジェクトの表示をカスタマイズします。
カスタム表示の設計
メモ
この例では、既定のオブジェクト表示をもつクラス節で説明されている EmployeeInfo
クラスを使用します。
このカスタム表示の目的は以下のとおりです。
Department
プロパティから取得した部門名を含めるようにヘッダーを変更する。Public Info
とPersonal 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
— 有効なスカラー オブジェクトを表示するために呼び出されるgetPropertyGroups
— 表示用のプロパティ グループを作成
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
を使用することにより、オブジェクト プロパティに格納された個人情報を変更することなく、Salary
とPassword
のプロパティに表示される値を置き換えることができます。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