Matlab GUI控件之——uitable

uitable 或说 table,属于Matlab的GUI控件中相对冷门的控件,因此相关的教程要么少,要么不全,但这个控件还是很有价值的,下面详细介绍一下uitable的一些基本知识;

开始

matlab实现UIAxes和UItable的切换 matlab gui uitable_uitable


matlab实现UIAxes和UItable的切换 matlab gui uitable_GUI_02

初始化

初始化,要添加控件的CreateFcn函数。

matlab实现UIAxes和UItable的切换 matlab gui uitable_matlab_03

之后在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) 如果列数什么没有变动,则不需要再次设置列名。

进阶

  1. 很多时候 table 和 excel 表联合使用,但其实并没有特别需要注意的,无非是先写读excel表数据的代码,然后还是一样的流程,将包含数据的元胞数组set入table控件中去。
  2. 文字颜色,如果设置表格中文字的颜色,甚至不同的颜色呢? 此处我是在网上找到一个很强的解决方案: ['<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>'];

matlab实现UIAxes和UItable的切换 matlab gui uitable_matlab_04

  1. 再者,一些属性可以直接在属性里设置,分别有:Property 和 Table Property

    Tip:比如,列的宽度就可以直接在 Table Property Editor 里设置。

先这么多,后续再补充~~~~