matlab.mixin.CustomCompactDisplayProvider class

Пакет: matlab.mixin

Интерфейс для настройки отображения объекта в контейнерах

Описание

Этот класс обеспечивает интерфейс для настройки путем MATLAB® представляет объекты с помощью компактного отображения. Компактное отображение обращается к сценарию, в котором объектный массив сохранен в контейнере (таком как структура, массив ячеек или таблица). Например, когда объектный массив сохранен в поле структуры, MATLAB может отобразить массив только в одной строке и в ограниченной ширине символов, доступной для того поля.

Чтобы добавить пользовательскую компактную функциональность отображения в ваш класс, выведите его из matlab.mixin.CustomCompactDisplayProvider.

classdef MyClass < matlab.mixin.CustomCompactDisplayProvider
    ...
end

Можно использовать matlab.mixin.CustomCompactDisplayProvider настроить компактное отображение для двух размещений отображения:

  • Однострочное размещение — объектный массив должен быть отображен в одной строке. MATLAB использует это размещение отображения, когда объектный массив содержится в массиве структур или массиве ячеек, или как свойство объекта MATLAB.

  • Колоночное размещение — объектный массив должен быть отображен в нескольких строках как часть ориентированных на столбец или табличных данных. MATLAB использует это размещение отображения, когда объектный массив содержится в табличной переменной.

Атрибуты класса

Abstract
true
HandleCompatible
true

Для получения информации об атрибутах класса см. Атрибуты класса.

Методы

развернуть все

Примеры

свернуть все

Чтобы отобразить пользовательскую информацию об объектах вашего класса, когда они будут сохранены в контейнере, выведите свой класс из matlab.mixin.CustomCompactDisplayProvider интерфейс и переопределение выбирают методы интерфейса.

В вашей текущей папке создайте Weekdays класс перечисления путем разделения на подклассы matlab.mixin.CustomCompactDisplayProvider. Чтобы настроить компактное отображение для одной линии и колоночных размещений, замените compactRepresentationForSingleLine и compactRepresentationForColumn методы, соответственно:

  • Однострочное размещение — Подгонка как можно больше элементов объектного массива в доступной ширине символов. Кроме того, добавьте аннотацию, если массив включает дни выходных дней. Чтобы настроить компактное отображение для однострочного размещения, закажите телефонный разговор с widthConstrainedDataRepresentation служебный метод в compactRepresentationForSingleLine.

  • Колоночное размещение — Подгонка все элементы объектного массива в доступной ширине символов или иначе использование измерения массива и имя класса. Кроме того, добавьте аннотацию для каждой строки объектного массива, который включает дни выходных дней. Чтобы настроить компактное отображение для колоночного размещения, закажите телефонный разговор с fullDataRepresentation служебный метод в compactRepresentationForColumn.

classdef WeekDays < matlab.mixin.CustomCompactDisplayProvider
    enumeration
        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    end

    methods
        function rep = compactRepresentationForSingleLine(obj,displayConfiguration,width)
            % Fit as many array elements in the available space as possible
            [rep,~] = widthConstrainedDataRepresentation(obj,displayConfiguration, ...
                width,Annotation=annotation(obj));
        end
        function rep = compactRepresentationForColumn(obj,displayConfiguration,~)
            % Fit all array elements in the available space, or else use
            % the array dimensions and class name
            rep = fullDataRepresentation(obj,displayConfiguration, ...
                Annotation=annotation(obj));
        end
        function res = annotation(obj)
            % Construct annotation as a column vector of strings
            numRows = size(obj,1);
            res = strings(numRows,1);
            for i = 1:numRows   % Add text for each row that includes weekend days
                currentRow = obj(i,:);
                if any(currentRow == WeekDays.Saturday) || any(currentRow == WeekDays.Sunday)
                    res(i) = "Includes Weekends";
                end
            end
        end
    end
end

В Командном окне создайте структуру с полем, которое содержит массив некоторых Weekdays объекты. MATLAB отображает все элементы массива в одной строке. Кроме того, потому что массив включает член перечисления WeekDays.Saturday, MATLAB отображает аннотацию.

s = struct("FreeLunchDays",[WeekDays.Monday WeekDays.Wednesday WeekDays.Friday WeekDays.Saturday])
s = 

  struct with fields:

    FreeLunchDays: [Monday    Wednesday    Friday    Saturday]  (Includes Weekends)

Создайте другой Weekdays массив со многими элементами, так, чтобы они не могли все быть отображены в одной строке. Когда вы присваиваете этот массив s.FreeLunchDays, MATLAB отображает как можно больше ведущих элементов массива и использует символ замещающего знака, чтобы представлять не использованные элементы.

days = repmat(WeekDays.Friday,1,52); 
s.FreeLunchDays = days
s = 

  struct with fields:

    FreeLunchDays: [Friday    Friday    Friday    Friday    Friday    Friday    Friday    Friday    …    ]

Теперь протестируйте пользовательское компактное отображение WeekDays объекты для колоночного размещения. Создайте таблицу T это содержит WeekDays массив, включающий несколько элементов. Поскольку доступная ширина символов является достаточно большой, MATLAB отображает все элементы массива. Кроме того, потому что вторая строка массива включает член перечисления WeekDays.Saturday, MATLAB отображает аннотацию для той строки.

Location = ["Boston"; "New York"];
FreeLunchDays = [WeekDays.Wednesday WeekDays.Friday; WeekDays.Thursday WeekDays.Saturday];
T = table(Location,FreeLunchDays)
T =

  2×2 table

     Location                   FreeLunchDays               
    __________    __________________________________________

    "Boston"      Wednesday    Friday                       
    "New York"    Thursday     Saturday  (Includes Weekends) 

Обновите FreeLunchDays переменная с помощью WeekDays массив со многими элементами. Поскольку MATLAB больше не может отображать все элементы массива в доступной ширине символов, он использует измерения массива и имя класса.

T.FreeLunchDays = repmat(WeekDays.Friday,2,52)
T =

  2×2 table

     Location     FreeLunchDays
    __________    _____________

    "Boston"      1×52 WeekDays
    "New York"    1×52 WeekDays
Введенный в R2021b
Для просмотра документации необходимо авторизоваться на сайте