exponenta event banner

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

В этом примере показано, как отобразить таблицу в приложении с помощью 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 собственность. 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'.

Создание обратного вызова

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

uit.CellEditCallback = @ageCheckCB;

Например, если требуется, чтобы столбец «Возраст» содержал значения между 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