Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

显示表的编程式 App

此示例说明如何使用 uitable 函数在 App 中显示表。它还显示如何修改该表的外观,以及如何在运行的 App 中限制对表进行编辑。

在图窗中创建表 UI 组件

使用 uitable 函数在图窗中创建一个空的 UI 表。

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

创建包含混合数据类型的表

加载包含混合数据类型的样本患者数据,并将其存储在表数组中。要使数据在表组件的单元格中显示为下拉列表,请将元胞数组变量转换为分类数组。要在表 UI 组件中显示数据,请将表数组指定为 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'.

自定义显示

您可以通过多种方式自定义 UI 表的显示。使用 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×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.

默认情况下,表 UI 组件使用隔行着色,并循环使用指定的背景颜色,直到到达表的末尾。如果将 RowStriping 属性设置为 'off',表 UI 组件将对所有行只使用在 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 属性。默认情况下,无法在运行的 App 中编辑数据。将某列的 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;

例如,如果您要年龄列包含 0120 之间的值,请将 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