exponenta event banner

Настройка отображения массивов объектов

Цель

Настройка отображения нескалярных объектов, включая пустые массивы объектов.

Проектирование пользовательского дисплея

Примечание

В этом примере используется EmployeeInfo класс, описанный в разделе «Класс с отображением объектов по умолчанию».

Целью этого настраиваемого дисплея является:

  • Создание пользовательского заголовка с использованием некоторых элементов заголовка по умолчанию

  • Отображение подмножества информации о свойствах для каждого объекта в массиве.

  • Список дескрипторов удаленных объектов в массиве с помощью char вектор со ссылками на документацию по объектам-дескрипторам и классу.

  • Отображение пустых объектов с незначительным изменением заголовка по умолчанию

Вот настраиваемый дисплей массива из трех 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 чтобы получить имя класса со ссылкой на справку для этого класса.

  • Отображение измененного текста заголовка.

  • Петля элементов в массиве, построение двух различных подзаголовков в зависимости от состояния отдельного объекта. В цикле этот метод:

    • Обнаруживает дескрипторы удаленных объектов (с помощью isvalid метод класса дескриптора). Использование getDeletedHandleText и getClassNameForHeader для построения текста для элементов массива, которые являются дескрипторами удаленных объектов.

    • Построение пользовательского подзаголовка для допустимых элементов объекта в массиве

  • Создает PropertyGroup объект, содержащий Name и Department свойства для действительных objects

  • Использует 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

Переопределение displayEmpureObject

MATLAB вызывает displayEmptyObject для отображения пустых массивов объектов. Реализация этого метода в EmployeeInfo строит пользовательский заголовок для пустых объектов следующим образом:

  • Получение размеров массива в символьном формате с помощью convertDimensionsToString статический метод.

  • Получение текста с именем класса, связанным с helpPopup с помощью функции getClassNameForHeader статический метод.

  • Построение и отображение пользовательского текста для пустых массивов.

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

 Полный список классов

Связанные темы