スカラー オブジェクトの表示のカスタマイズ
目的
スカラー オブジェクトの表示をカスタマイズします。
カスタム表示の設計
メモ
この例では、既定のオブジェクト表示をもつクラス節で説明されている 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
