Matlab GUI控件之——uitable
uitable 或说 table,属于Matlab的GUI控件中相对冷门的控件,因此相关的教程要么少,要么不全,但这个控件还是很有价值的,下面详细介绍一下uitable的一些基本知识;
开始
初始化
初始化,要添加控件的CreateFcn函数。
之后在CreateFcn函数下,对其进行基础的设置。
Table 控件的数据实质上是cell类型,新建一个cell类型的data
% 在CreateFcn函数下具体的内容
function uitable1_CreateFcn(hObject, eventdata, handles)
Data = cell(3,2); %新建一个3行2列的元胞数组
% 设定具体的内容,如:
Data(:,1) = {'佳洁士-全优七效';
'佳洁士-3D炫白';
'黑人-茶倍健';}; %设置第1列为牙膏的产品名
Data(:,2) = {15;16;13}; %设置第2列为牙膏的单价
set(hObject, 'ColumnName', {'产品名','单价'}, 'data',Data) %将数据设置到uitable控件中
这里需要稍微介绍一下就是:
此处先自定义好的存储了内容的元胞数组,再用set函数具体传入数据到控件从而完成初始化。其语法大致是这样:
1. 首先传入控件的句柄,也就是控件的Tag,具体Tag都是自己设定的,我这是默认的: uitable1
。但可以看到,此处写的是hObject,因为这段初始化代码写在控件的CreateFcn函数下,其参数本身就有hObject,可以直接传入set函数。
2. 'ColumnName'
有基础的都很清楚,引号括起来是其属性,而紧跟其后则是该属性的具体设置的值。’ColumnName’代表是titable的列标题。
手段
3. 'data'
字段代表的就是数据,后面紧跟我们存储了内容的元胞数组 Data
。
更新
在使用中,难免需要对表格的数据进行更新,uitable的更新似乎显得有点繁琐,但代码实现并不麻烦,只是让人感觉不那么灵活。
具体来说:
1. 先获取其数据:tableData = get(handles.uitable1,'data');
此时一般就是在别的函数下写的,所以传入Tag handles.uitable1
。返回的tableData就是包含内容的元胞数组,可以肆意对其进行更改。
2. 之后再次:set(handles.uitable1,'data',tableData)
如果列数什么没有变动,则不需要再次设置列名。
进阶
- 很多时候 table 和 excel 表联合使用,但其实并没有特别需要注意的,无非是先写读excel表数据的代码,然后还是一样的流程,将包含数据的元胞数组set入table控件中去。
- 文字颜色,如果设置表格中文字的颜色,甚至不同的颜色呢? 此处我是在网上找到一个很强的解决方案:
['<html><FONT color=#76AB2F">' '高露洁-劲白' '</Font></html>']
根本不像是matlab的语法,实现了指定单元格可以指定颜色。 附上文章来源: http://www.ilovematlab.cn/thread-89772-1-1.html 他的思路:“目前的uitable無法在單一表格內設置顏色,不過只要利用與java相同的特性 就可以達到單一表格顏色的設置 主要的特性就是能夠接受HTML的部分程序,我嘗試GUI的物件 可以使用的物件有:listbox、popupmenu、uitable 按鈕系列是乎也可以不過不穩定,而且並不是所有的HTML都有效果” 【在下十分佩服,对于其原理我并没有做什么探究,不过那位作者的方法在table里真的很好用】 举个我做的例子:
data = cell(3,2); %新建一个三行四列的元胞数组
data{1,1} = ['<html><FONT color=#0071BC">' '佳洁士-全优七效' '</Font></html>'];
data{2,1} = ['<html><FONT color=#D85218">' '佳洁士-3D炫白' '</Font></html>'];
data{3,1} = ['<html><FONT color=#ECB01F">' '黑人-茶倍健' '</Font></html>'];
temp = {15; 16; 13};
data{1,2} = ['<html><FONT color=#0071BC">' num2str(temp{1}) '</Font></html>'];
data{2,2} = ['<html><FONT color=#D85218">' num2str(temp{2}) '</Font></html>'];
data{3,2} = ['<html><FONT color=#ECB01F">' num2str(temp{3}) '</Font></html>'];
- 再者,一些属性可以直接在属性里设置,分别有:Property 和 Table Property
Tip:比如,列的宽度就可以直接在 Table Property Editor 里设置。
先这么多,后续再补充~~~~