uitable
创建表用户界面组件
说明
在当前图窗中创建一个表 UI 组件,并返回 uit
= uitableTable
UI 组件对象。如果没有可用的图窗,MATLAB® 将调用 figure
函数创建一个图窗。
在指定的父容器中创建一个表。父容器可以是 uit
= uitable(parent
)Figure
对象或子容器(如面板)。
使用一个或多个名称-值参量指定表属性。可将此选项与上述语法中的任何输入参量组合一起使用。uit
= uitable(___,Name,Value
)
示例
通过从文件中读取数据创建一个具有不同数据类型的表数组 t
。从 t
中选择四个变量的前 15 行。
t = readtable("patients.xls"); vars = ["Age","Systolic","Diastolic","Smoker"]; t = t(1:15,vars);
创建一个表 UI 组件来显示表格数据。数据在组件中的显示方式由数据类型确定。例如,逻辑数据显示为复选框。有关详细信息,请参阅在 App 中格式化表格数据。
fig = uifigure; uit = uitable(fig,"Data",t,"Position",[20 20 350 300]);
在表 UI 组件中显示并以编程方式更新数据。
通过从文件中读入海啸数据来创建一个表数组,并在表 UI 组件中显示部分数据。
t = readtable("tsunamis.xlsx"); vars = ["Year","MaxHeight","Validity"]; t = t(1:20,vars); fig = uifigure; uit = uitable(fig,"Data",t);
通过编辑表 UI 组件的 Data
属性,更新第一行中发生海啸的可能性。
uit.Data.Validity(1) = {'definite tsunami'};
通过访问和修改 MaxHeight
变量中的数据,将最大高度数据从米转换为英尺。
uit.Data.MaxHeight = uit.Data.MaxHeight*3.281;
创建一个 App,它允许用户对表数据进行排序和编辑,并在数据发生变化时更新数据可视化。
在名为 tableDataApp.m
的文件中,编写实现该 App 的函数:
创建一个包含海啸数据的
table
数组。用网格布局管理器创建一个 UI 图窗。
在该图窗中创建一个可排序且可编辑的表 UI 组件。将
table
数组存储在组件的Data
属性中。创建一个气泡图来可视化海啸数据,其中气泡的坐标表示海啸的纬度和经度,气泡的大小表示海啸的最大高度。
当 App 用户通过编写
DisplayDataChangedFcn
回调在表 UI 组件中对列进行排序或编辑单元格时,会更新气泡图。有关回调的详细信息,请参阅Create Callbacks for Apps Created Programmatically。
function tableDataApp % Create table array t = readtable("tsunamis.xlsx"); vars = ["Latitude","Longitude","MaxHeight"]; t = t(1:20,vars); % Create UI figure fig = uifigure; fig.Position(3:4) = [722 360]; gl = uigridlayout(fig,[1 2]); % Create table UI component uit = uitable(gl); uit.Data = t; uit.ColumnSortable = true; uit.ColumnEditable = [false false true]; % Create bubble chart ax = geoaxes(gl); lat = t.Latitude; long = t.Longitude; sz = t.MaxHeight; bubblechart(ax,lat,long,sz) % Specify table callback uit.DisplayDataChangedFcn = @(src,event) updatePlot(src,ax); end function updatePlot(src,ax) t = src.DisplayData; lat = t.Latitude; long = t.Longitude; sz = t.MaxHeight; bubblechart(ax,lat,long,sz) end
运行 App。
tableDataApp
当您指向可排序的列时,该列会在标题中显示箭头。按海啸的最大高度对表进行排序。
通过双击表单元格然后输入新高度,将第二行中海啸的最大高度编辑为 30 米。气泡图会相应更新。
使用 uistyle
和 addStyle
函数为表 UI 组件的行、列或单元格设置样式。
将海啸示例数据作为表数组读入工作区中。然后,创建一个表 UI 组件来显示数据。
tdata = readtable("tsunamis.xlsx"); vars = ["Year","Month","Day","Hour", ... "Cause","EarthquakeMagnitude"]; tdata = tdata(1:20,vars); fig = uifigure("Position",[500 500 760 360]); uit = uitable(fig, ... "Data",tdata, ... "Position",[20 20 720 320]);
使用 ismissing
函数获取包含缺失值的表元素的逻辑数组。找到含有 NaN
值的元素的行和列下标。最后,创建一个红色背景色样式并将它添加到表中包含 NaN
值的单元格中。
styleIndices = ismissing(tdata); [row,col] = find(styleIndices); s = uistyle("BackgroundColor",[1 0.6 0.6]); addStyle(uit,s,"cell",[row,col]);
创建一个 App,当 App 用户选择表中的数据时,该 App 会在地图上绘制该数据。
在名为 selectTsunamis.m
的文件中,编写实现该 App 的函数:
加载海啸数据。
在网格布局管理器中创建一个具有表 UI 组件和地理气泡图的 UI 图窗。
配置表 UI 组件。将海啸数据存储在
Data
属性中,并让用户通过设置SelectionType
和Multiselect
属性来选择多行。指定一个
SelectionChangedFcn
回调,当 App 用户更改表选择时,该回调会更新气泡图。plotTsunami
回调函数为每个所选行绘制一个气泡,其中气泡的大小表示最大海啸高度。有关回调的详细信息,请参阅Create Callbacks for Apps Created Programmatically。
function selectTsunamis % Load data t = readtable("tsunamis.xlsx"); vars = ["Latitude","Longitude","MaxHeight"]; t = t(1:20,vars); % Create UI components fig = uifigure("Position",[100 100 800 350]); gl = uigridlayout(fig,[1 2]); gl.ColumnWidth = {'1x','2x'}; tbl = uitable(gl); gb = geobubble(gl,[],[]); % Configure table tbl.Data = t; tbl.SelectionType = "row"; tbl.Multiselect = "on"; tbl.SelectionChangedFcn = @(src,event) plotTsunami(src,event,gb); end % Plot tsunami data for each selected row function plotTsunami(src,event,gb) rows = event.Selection; data = src.Data(rows,:); gb.LatitudeData = data.Latitude; gb.LongitudeData = data.Longitude; gb.SizeData = data.MaxHeight; end
运行 App。
selectTsunamis
通过在点击时按住 Ctrl 键选择多个表行。该图会随所选海啸数据而更新。
自 R2021a 起
使用 scroll
函数以编程方式滚动到表 UI 组件的行、列或单元格。
将样本患者数据以表数组形式读入工作区。然后,创建一个表 UI 组件来显示数据。
tdata = readtable("patients.xls"); vars = ["Age","Systolic","Diastolic","Smoker"]; tdata = tdata(1:40,vars); fig = uifigure; uit = uitable(fig,"Data",tdata); uit.RowName = "numbered";
滚动到表的第 25 行。
scroll(uit,"row",25)
名称-值参数
以 Name1=Value1,...,NameN=ValueN
的形式指定可选参量对组,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: uitable(Data=[1 2 3; 4 5 6])
使用指定的数据创建一个表 UI 组件。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: uitable("Data",[1 2 3; 4 5 6])
使用指定的数据创建一个表 UI 组件。
注意
此处所列的属性只是可用属性中的一部分。有关完整列表,请参阅 Table
。
表数据,指定为以下类型的数组之一:
表数组 - 显示
table
数组支持的任意数据类型组合,例如datetime
、duration
和categorical
。数值数组 - 显示数值,例如
double
或single
。逻辑数组 - 显示复选框。
true
值对应于选中复选框,而false
值显示不选中复选框。元胞数组 - 显示数值、逻辑值或字符数组值的任意组合。
字符串数组 - 显示字符和文本。
字符向量元胞数组 - 显示字符和文本。
要避免用户在可编辑单元格中输入无效数据时显示警告或 NaN
值,可以编写一个 CellEditCallback
函数,将该数据转换为正确的类型。当用户编辑单元格时,Data
属性会更新。
指定表数组
您可以将 Data
属性指定为表数组。表数组为将表格数据存储为 MATLAB 变量提供了一种便捷方式。table
、readtable
和 array2table
函数用于创建表数组。而 uitable
函数用于创建 Table
UI 组件(App 的用户界面组件)。
当您以表数组的形式指定 Table
UI 组件的 Data
属性时,MATLAB 会自动基于表数组中的值设置 Table
UI 组件的格式:
默认情况下,App 中显示的列名称与表数组中的
VariableNames
属性匹配。更改Table
UI 组件的ColumnName
属性会更新 UI,但不会更新表数组中的变量名称。默认情况下,App 中显示的行名称与表数组中的
RowName
属性匹配。更改Table
UI 组件的RowName
属性会更新 UI,但不会更新表数组中的行名称。每个表数组变量的数据类型控制着 App 中相应列的格式。如果您尝试设置
ColumnFormat
属性,MATLAB 将返回警告。
有关显示表数组数据的详细信息,请参阅在 App 中格式化表格数据。
指定数值数组、逻辑数组、元胞数组、字符串数组或字符向量元胞数组
使用 ColumnFormat
属性指定数据的格式,数据可以是数值数组、逻辑数组、元胞数组、字符串数组或字符向量元胞数组。如果编辑了数据并导致数据的数据类型与 ColumnFormat
属性不匹配,MATLAB 会转换数据或显示警告。有关详细信息,请参阅 ColumnFormat
属性描述。
表列的宽度,指定为 'auto'
、'1x'
、'fit'
或指定为由字符向量、字符串和数值组成的 1
×n
元胞数组。
自动宽度 - 指定
'auto'
可让 MATLAB 使用多个因子自动计算列宽,其中一个因子是ColumnName
属性值。根据内容调整宽度 - 指定值
'fit'
可将列配置为严格调整宽度来适应列名称和数据。此设置允许比'auto'
更窄的列。均匀宽度 - 指定值
'1x'
可使所有列的宽度相同,平均分配可用空间。固定宽度 - 指定以像素为单位定义列宽的数值元胞数组。
组合 - 可以在元胞数组中组合固定和可变列宽。元胞数组中的每一列对应于表中的一列。如果您指定的元胞数组中的值少于列数,则没有指定值的列将保留默认值
'auto'
。如果数组中的值多于列数,MATLAB 会忽略多余的值。加权可变宽度 - 指定包含字符向量或字符串的元胞数组,这些字符向量或字符串由一个数字与
'x'
串联而成(例如,'2x'
、'3x'
等)。每列的 x 因子相对于其他列按比例设置该列的宽度,同时考虑 UI 表中的剩余空间。
如果用户在运行的 App 中以交互方式调整表列的大小,即使您稍后更新 ColumnWidth
属性,调整后的列宽仍会保留。
示例: uit = uitable(uifigure,'ColumnWidth','auto','Data',[1 2 3;4 5 6])
示例: uit = uitable(uifigure,'ColumnWidth','fit','Data',[1 2 3;4 5 6])
示例: uit = uitable(uifigure,'ColumnWidth',{64,60,40},'Data',[1 2 3;4 5 6])
示例: uit = uitable(uifigure,'ColumnWidth',{'2x','1x','1x'},'Data',[1 2 3;4 5 6])
示例: uit = uitable(uifigure,'ColumnWidth',{64,"auto",40},'Data',[1 2 3;4 5 6])
示例: uit = uitable(uifigure,'ColumnWidth',{'fit','1x','3x'},'Data',[1 2 3;4 5 6])
编辑列单元格的功能,指定为:
空逻辑数组 (
[]
) - 没有可编辑的列。1×
n
逻辑数组 - 该数组指定哪些列是可编辑的。n
的值等于表中的列数。数组中的每个值对应于一个表列。数组中的值true
将使该列中的单元格可编辑。值false
将使该列中的单元格不可编辑。如果数组中的值多于列数,MATLAB 会忽略多余的值。如果数组中的值少于列数,则没有指定值的列不可编辑。逻辑标量 - 整个表可编辑或不可编辑。
当用户编辑单元格时,Data
属性会更新。
示例: uit = uitable(uifigure,'Data',rand(10,3),'ColumnEditable',[false true true])
示例: uit = uitable(uifigure,'Data',rand(10,3),'ColumnEditable',false)
要使用户能够与包含复选框或弹出式菜单的表列中的控件进行交互,请将 ColumnEditable
属性设置为 true
。
如果 Data
属性是一个表数组,则任何多列变量或包含不可编辑数据类型的变量,如 duration
,在运行的 App 中都不可编辑,即使 ColumnEditable
属性是 true
也是如此。对于元胞数组中包含的混合数据类型的表数组变量,只要这些数据类型是可编辑的,则表数组变量在运行的 App 中也将是可编辑的。
单元格编辑回调函数,指定为下列值之一:
函数句柄。
第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参量。
包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。
使用此回调函数可在 App 用户更改表单元格的内容时执行计算或验证输入。
此回调函数可以访问有关用户与单元格的交互的特定信息(例如单元格索引)。MATLAB 将 CellEditData
对象中的此信息作为第二个参量传递给回调函数。在 App 设计工具中,该参量名为 event
。您可以使用圆点表示法查询对象属性。例如,event.Indices
返回所选单元格的索引。CellEditData
对象不可用于指定为字符向量的回调函数。
下表说明了 CellEditData
对象的属性。
属性 | 描述 |
---|---|
Indices | 这是一个 1×2 数组,包含用户在运行的 App 中编辑的单元格的行和列索引。对列进行排序时, |
DisplayIndices | 这是一个 1×2 数组,包含与排序表显示中已编辑单元格的位置对应的行和列索引。如果用户不对列进行排序,则 |
PreviousData | 这是以前的单元格数据。默认值为空矩阵 |
EditData | 这是用户输入的值。 |
NewData | 这是 MATLAB 写入 如果 MATLAB 在用户输入的数据中检测到错误,则 |
Error | 这是 MATLAB 在用户输入的数据中检测到错误时返回的错误消息。 当 MATLAB 成功将值写入 如果 |
Source | 执行回调的组件。 |
EventName |
|
当用户编辑表单元格时,MATLAB 执行以下步骤:
尝试将新值存储到该表的
Data
属性中调用
CellEditCallback
函数(如果存在)
如果值导致错误,且没有任何 CellEditCallback
函数,则单元格数据会还原为以前的值,并且不会显示任何错误。
有关编写回调的详细信息,请参阅App 设计工具中的回调。
表的位置和大小,指定为 [left bottom width height]
形式的四元素向量。此表介绍该向量中的每个元素。
元素 | 描述 |
---|---|
left | 父容器的内部左边缘与表的外部左边缘之间的距离 |
bottom | 父容器的内部下边缘与表的外部下边缘之间的距离 |
width | 表的左右外部边缘之间的距离 |
height | 表的上下外部边缘之间的距离 |
所有测量值都采用 Units
属性指定的单位。
Position
值相对于父容器的可绘制区域。可绘制区域是指容器边框内的区域,不包括装饰元素(如菜单栏或标题)所占的区域。
测量单位,指定为下表中的值之一。
单位值 | 描述 |
---|---|
'pixels' (默认值) | 在 Windows® 和 Macintosh 系统上,像素的大小为 1/96 英寸。此大小与系统分辨率无关。 在 Linux® 系统上,一个像素的大小由系统分辨率确定。 |
'normalized' | 这些单位依据父容器进行归一化。容器的左下角映射到 |
'inches' | 英寸。 |
'centimeters' | 厘米。 |
'points' | 磅。1 磅等于 1/72 英寸。 |
'characters' | 这些单位基于图形根对象的默认 uicontrol 字体:
要访问默认的 uicontrol 字体,请使用 |
推荐值为 'pixels'
,因为大多数 MATLAB App 构建功能都以像素为单位测量距离。您可以创建一个表,该表根据父容器的大小重新缩放,方法是将使用 uigridlayout
函数创建的一个网格布局管理器作为该表的父级。有关详细信息,请参阅Lay Out Apps Programmatically。
版本历史记录
在 R2008a 中推出当您向一个表添加多行数据时,组件会调整行高以显示内容。例如,以下代码创建一个表,其中包含一个单元格中的两行文本。具有多行内容的行的高度会调整以显示两行文本。
fig = uifigure; t = uitable(uifigure, ... Data=["Omelette","Eggs";"Hamburger","Beef"+newline+"Bun"]);
这些属性可用于使用 figure
函数创建的 App 中的表:
DisplayData
ColumnSortable
Selection
DisplaySelection
SelectionType
Multiselect
StyleConfigurations
Layout
SelectionChangedFcn
DisplayDataChangedFcn
ClickedFcn
DoubleClickedFcn
当您查询基于 figure
的 App 中表 UI 组件的 Extent
属性时,该属性始终返回 [0 0 300 300]
。向量的第三个和第四个元素表示默认表宽度和高度。在以前的版本中,查询 Extent
会返回一个向量,其中第三个和第四个元素表示作为表区域轮廓的矩形的宽度和高度(使用表数据、行高和列宽进行估计)。如果使用 Extent
属性来指定 UI 组件在 App 中的位置,则表 UI 组件可能会有不同大小,或 App 的布局可能会出现偏移。
更新您的代码,以通过使用以下替代方法之一来删除对表 Extent
属性的引用:
通过手动指定
Position
属性来布局表和其他 UI 组件。使用行高或列宽为
'fit'
的网格布局管理器来根据包含数据的表的大小自动缩放 App 布局。
使用 BackgroundColor
属性修改表颜色时,除了 RGB 三元组之外,您还可以将颜色指定为十六进制颜色代码或颜色名称。
使用表的 DisplaySelection
属性查询在当前表显示中选择的单元格。如果 App 用户对表中的列进行排序或重新排列,并且您要知道根据 App 用户的数据视图选择哪些单元格,则此属性非常有用。
使用 ClickedFcn
和 DoubleClickedFcn
回调属性对用户点击和双击表 UI 组件时的响应进行编程。
有关详细信息,请参阅Table
。
使用 ColumnRearrangeable
属性指定在 App 中以交互方式重排表列的能力。在 ColumnRearrangeable
值设置为 'on'
的表 UI 组件中,通过点击并拖动列标题来重排 App 中的表列。
在 App 设计工具和使用 uifigure
函数创建的 App 中,您可以通过创建 DisplayDataChangedFcn
回调函数对 App 进行编程,以便在用户重排表列时作出响应。
有关详细信息,请参阅Table
。
使用属性为表 UI 组件配置选择选项。
使用
Selection
属性设置和查询表选择。使用
SelectionType
属性指定用户是选择表单元格、行还是列。使用
Multiselect
属性指定用户是选择单个还是多个表元素。通过指定
SelectionChangedFcn
回调,每当用户选择表数据时都会更新您的 App。
表 UI 组件中的所选选项仅在使用 App 设计工具创建的 App 中和使用 uifigure
函数创建的图窗中受支持。
有关详细信息,请参阅Table
。
在使用 App 设计工具和基于 uifigure
创建的 App 中配置表 UI 组件的列宽。
要指定加权可变宽度,请将
ColumnWidth
属性设置为与'x'
字符配对出现的数字(例如,'2x'
)。要将列宽配置为根据列名称和数据自动调整,请将
ColumnWidth
属性设置为'fit'
。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)