Программное приложение, которое отображает таблицу

В этом примере показано, как отобразить таблицу в приложении используя uitable функция. В нем также показано, как изменить внешний вид таблицы и как ограничить редактирование таблицы в запущенном приложении.

Создайте компонент пользовательского интерфейса таблицы на фигуре

uitable функция создает пустую таблицу пользовательского интерфейса на рисунке.

fig = uifigure('Position',[100 100 752 250]);
uit = uitable('Parent',fig,'Position',[25 50 700 200]);

Составьте таблицу, содержащую смешанные типы данных

Загрузите выборки данных о пациентах, которые содержат смешанные типы данных, и сохраните их в массиве таблиц. Чтобы данные появились как выпадающий список в камерах компонента таблицы, преобразуйте переменную массива ячеек в категориальный массив. Чтобы отобразить данные в компоненте пользовательского интерфейса таблицы, задайте массив таблицы как значение Data свойство.

load patients
t = table(LastName,Age,Weight,Height,Smoker, ...
          SelfAssessedHealthStatus);
t.SelfAssessedHealthStatus = categorical(t.SelfAssessedHealthStatus, ...
          {'Poor','Fair','Good','Excellent'},'Ordinal',true);

uit.Data = t;

Table of patient data, with columns titled 'LastName', 'Age', 'Weight', 'Height', 'Smoker', and 'SelfAssessedHealthStatus'. The SelfAssessedHealthStatus column displays the status of each patient as one of 'Poor', 'Fair', 'Good', or 'Excellent'.

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

Отображение таблицы пользовательского интерфейса можно настроить несколькими способами. Используйте ColumnName свойство для добавления заголовков столбца.

uit.ColumnName = {'Last Name','Age','Weight', ...
                  'Height','Smoker','Health Status'};

Table of patient data, with columns titled 'Last Name', 'Age', 'Weight', 'Height', 'Smoker', and 'Health Status'. The data in the table is equivalent to the table above.

Чтобы настроить ширины столбцов, задайте ColumnWidth свойство. The ColumnWidth свойство является 1-by-N массивом ячеек, где N - количество столбцов в таблице. Установите определенную ширину столбца или используйте 'auto' чтобы разрешить MATLAB® установите ширину на основе содержимого.

uit.ColumnWidth = {'auto',75,'auto','auto','auto',100};

Table of patient data with columns of different sizes. The Last Name, Weight, Height, and Smoker columns are the same width, set based on the contents of the column. The Age column is 75 pixels wide, and the Health Status column is 100 pixels wide.

Добавьте пронумерованные заголовки строк путем установки RowName свойство к 'numbered'.

uit.RowName = 'numbered';

Table of patient data. The first column of the table does not have a title and provides the row number.

Измените положение и размер таблицы, используя Position свойство.

uit.Position = [15 25 565 200];

Table of patient data, moved down in the figure window and made less wide when compared to the previous table. The Age and Health Status columns remain at 75 and 100 pixels wide, respectively. The Last Name, Weight, Height, and Smoker column widths are automatically resized to fit the new table size.

По умолчанию компоненты пользовательского интерфейса таблицы используют чередование строк и циклически просматривают указанные цвета фона до тех пор, пока не будет достигнут конец таблицы. Если вы задаете RowStriping свойство к 'off', компонент пользовательского интерфейса таблицы будет просто использовать первый цвет, указанный в BackgroundColor свойство для всех строк. Здесь оставьте строку полоски 'on' и установите три разных цвета для BackgroundColor свойство.

uit.BackgroundColor = [1 1 .9; .9 .95 1;1 .5 .5];

Table of patient data. The first, fourth, and seventh rows are colored yellow, the second, fifth, and eight rows are colored blue, and the third and sixth rows are colored red.

Включите сортировку столбцов и ограничьте редактирование значений камер

Сделать все столбцы сортируемыми путем установки ColumnSortable свойство к true. Если столбец сортируемый, стрелы появляются в заголовке при наведении указателя мыши на него.

uit.ColumnSortable = true;

Table of patient data. The Last Name column has arrows pointing up and down next to the column title to indicate that the column is sortable.

Чтобы ограничить возможность пользователя редактировать данные в таблице, установите ColumnEditable свойство. По умолчанию данные нельзя редактировать в текущем приложении. Установка ColumnEditable свойство к true для столбца позволяет пользователю редактировать данные в этом столбце.

uit.ColumnEditable = [false false true true true true];

Table of patient data. The app user has clicked on the Health Status cell in the first row, which displays a drop-down menu with the options 'Poor', 'Fair', 'Good', and 'Excellent'.

Создайте коллбэк

The Table объект имеет два обычно используемых обратных вызова. The CellSelectionCallback выполняется, когда пользователь выбирает другую камеру. The CellEditCallback выполняется при изменении пользователем значения в камере.

uit.CellEditCallback = @ageCheckCB;

Для примера, если вы хотите, чтобы столбец Age содержал значения между 0 и 120, установите CellEditCallback к функции, такой как эта:

function ageCheckCB(src,eventdata)
if (eventdata.Indices(2) == 2 && ...                  % check if column 2
      (eventdata.NewData < 0 || eventdata.NewData > 120))
   tableData = src.Data;
   tableData{eventdata.Indices(1),eventdata.Indices(2)} = eventdata.PreviousData;
   src.Data = tableData;                              % set the data back to its original value
   warning('Age must be between 0 and 120.')          % warn the user
end
end

Если пользователь вводит значение, которое находится вне допустимой области значений, функция обратного вызова возвращает предупреждение и возвращает значение камеры к предыдущему значению.

Получение всех свойств таблицы

Чтобы увидеть все свойства таблицы, используйте get команда.

get(uit)
          BackgroundColor: [3x3 double]
             BeingDeleted: off
               BusyAction: 'queue'
            ButtonDownFcn: ''
         CellEditCallback: @ageCheckCB
    CellSelectionCallback: ''
                 Children: [0x0 handle]
           ColumnEditable: [0 0 1 1 1 1]
             ColumnFormat: {}
               ColumnName: {6x1 cell}
           ColumnSortable: 1
              ColumnWidth: {'auto'  [75]  'auto'  'auto'  'auto'  [100]}
              ContextMenu: [0x0 GraphicsPlaceholder]
                CreateFcn: ''
                     Data: [100x6 table]
                DeleteFcn: ''
              DisplayData: [100x6 table]
    DisplayDataChangedFcn: ''
                   Enable: 'on'
                   Extent: [0 0 0 0]
                FontAngle: 'normal'
                 FontName: 'Helvetica'
                 FontSize: 12
                FontUnits: 'pixels'
               FontWeight: 'normal'
          ForegroundColor: [0 0 0]
         HandleVisibility: 'on'
            InnerPosition: [15 25 565 200]
            Interruptible: on
              KeyPressFcn: ''
            KeyReleaseFcn: ''
                   Layout: [0x0 matlab.ui.layout.LayoutOptions]
            OuterPosition: [15 25 565 200]
                   Parent: [1x1 Figure]
                 Position: [15 25 565 200]
     RearrangeableColumns: off
                  RowName: 'numbered'
              RowStriping: on
      StyleConfigurations: [0x3 table]
                      Tag: ''
                  Tooltip: ''
                     Type: 'uitable'
                    Units: 'pixels'
                 UserData: []
                  Visible: on