赞
踩
本人在使用MATLAB GUI完成毕业设计时碰到表格(uitable)的使用问题,需要实现对既有表格的增加删除功能,参考网上大神的代码有略微报错,分享自己的修改和实现思路。
MATLAB GUI表格(uitable)的增删操作
Matlab GUI控件之——uitable
本程序的界面如下图所示
为了储存表格内的数据,程序设置了公共变量soil_setting
global soil_setting;
%soil_setting为地层参数变量
本程序表格的命名(tag)为utab_soil
①打开.fig文件(在命令行中输入guide+文件名)
②通过右击控件(表格uitable)—查看回调(View Callback)—
即可查看表格的回调函数
本程序对uitable的CreateFcn与CellSelectionCallback进行了修改
在回调函数中依次打开上述两个回调函数,设置代码如下
function utab_soil_CreateFcn(hObject, eventdata, handles)
handles.hangIndex = -1;
%将行索引值设置为默认值-1,表示现在处于未选择状态
guidata(hObject, handles); %更新结构体
function utab_soil_CellSelectionCallback(hObject, eventdata, handles)
hang = eventdata.Indices; %获取行索引
if isempty(hang)==0 %若行索引不为空,表示用户选中表格中的某项
hangIndex = hang(1,1); %行索引赋值
handles.hangIndex = hangIndex; %把行索引添加到结构体
guidata(hObject, handles); %更新结构体
else
handles.hangIndex = -1;
%将行索引值设置为默认值-1,表示现在处于未选择状态
guidata(hObject, handles); %更新结构体
end
如上图所示,本程序通过三个按钮“插入”“删除”和“清除”分别实现对应的功能
按钮命名(tag)分别为btn_Add 、btn_Del 和btn_Clc
对三个按钮的Callback 回调函数进行了编写
点击插入按钮,弹出窗口提示用户插入数据,若表格内无数据或用户未选中任何数据,则在最下方插入数据;若用户选中一条数据,则在表格中间插入数据。
代码如下:
function btn_Add_Callback(hObject, eventdata, handles) global soil_setting; %声明global变量管理表格内容 prompt ={'土层名称','层厚(m)','重度(kN/m3)'}; %对话框内容提示 title = '请输入数据'; %对话框标题 lines = [1 40;1 40;1 40]; %设置输入框行数 为了显示标题这里要将行数改大一点 def = { '填土','2.5','18.5'}; %默认值 hangIndex = handles.hangIndex; %获取选择以后传入的行索引 %注意:若在uitable的CreateFcn函数中不将handles.hangIndex设置为-1, %则在soil_setting内容为空,需为表格添加第一条数据时,上述代码会报错,提示不存在handles.hangIndex if hangIndex==-1 %读取到hangIndex为-1,说明表格中无数据或用户未选中任何一行 %将数据增加在soil_setting的最后一行 通过对话框输入 tab = inputdlg(prompt,title,lines,def); %对话框设置 newrow1 = tab{1}; %对话框第一行内容 newrow2 = str2num(tab{2}); %对话框第二行内容 newrow3 = str2num(tab{3}); %对话框第三行内容 newArray = {newrow1, newrow2, newrow3}; %保存在新的矩阵中 oldData = get(handles.utab_soil,'Data'); %保存原来的数据 soil_setting=[oldData;newArray]; set(handles.utab_soil,'Data',soil_setting); %显示到表格中 else %表示用户已选中某行 则实现插入数据至表格中间的操作 tab = inputdlg(prompt,title,lines,def); %对话框设置 newrow1 = tab{1}; %对话框第一行内容 newrow2 = str2num(tab{2}); %对话框第二行内容 newrow3 = str2num(tab{3}); %对话框第三行内容 newArray = {newrow1, newrow2, newrow3}; %保存在新的矩阵中 oldData = get(handles.utab_soil,'Data'); %保存原来的数据 soil_setting=[oldData(1:hangIndex,:);newArray;oldData(hangIndex+1:length(oldData),:)]; %插入数据至表格中间 set(handles.utab_soil,'Data',soil_setting); %显示到表格中 end
若用户未选中表格的内容,则程序警告,若用户选中某项,则删除。
代码如下:
function btn_Del_Callback(hObject, eventdata, handles)
global soil_setting;
hangIndex = handles.hangIndex; %获取选择以后传入的行索引
if hangIndex==-1
warndlg('未选中行,无法删除。请选中一行再点击删除','警告');
else
soil_setting(hangIndex,:) = []; %删除选中的某行数据
set(handles.utab_soil,'Data',soil_setting); %显示到表格中
end
若用户执意清空,则清空。
代码如下:
function btn_Clc_Callback(hObject, eventdata, handles)
global soil_setting;
button=questdlg('你确定清除表格内容吗?','警告','是','否','否'); %内容,标题,选项,默认选项
if strcmp(button,'是')
soil_setting(:,:) = []; %删除全部
set(handles.utab_soil,'Data',soil_setting); %显示到表格中
end
点击插入按钮,表格自动生成第一条内容;
点击删除按钮,程序弹出警告选项,提示用户需选择后再删除
若用户未选择任何一条内容,点击插入按钮,自动在表格最下方插入;
点击删除按钮,程序弹出警告选项,提示用户需选择后再删除;
若用户已选择某条内容,点击插入按钮,在选中的项目下方插入用户输入的内容,点击删除按钮,则删除该内容。
因为没有设置接口读取用户的取消操作,后续在此基础上可继续开发
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。