0


Matlab GUI的uitable控件实现插入、删除、清空

文章目录

引子

本人在使用MATLAB GUI完成毕业设计时碰到表格(uitable)的使用问题,需要实现对既有表格的增加删除功能,参考网上大神的代码有略微报错,分享自己的修改和实现思路。

参考

MATLAB GUI表格(uitable)的增删操作
Matlab GUI控件之——uitable

表格创建

本程序的界面如下图所示

土层参数表格

1) 公共变量soil_setting

为了储存表格内的数据,程序设置了公共变量soil_setting

global soil_setting;%soil_setting为地层参数变量

2)程序所需的表格(uitable)的回调函数

本程序表格的命名(tag)为utab_soil

查看回调函数

①打开.fig文件(在命令行中输入guide+文件名)
②通过右击控件(表格uitable)—查看回调(View Callback)—
即可查看表格的回调函数

查看表格的回调函数

表格回调函数的修改

本程序对uitable的CreateFcn与CellSelectionCallback进行了修改

在回调函数中依次打开上述两个回调函数,设置代码如下

functionutab_soil_CreateFcn(hObject, eventdata, handles)
    handles.hangIndex =-1;%将行索引值设置为默认值-1,表示现在处于未选择状态guidata(hObject, handles);%更新结构体
functionutab_soil_CellSelectionCallback(hObject, eventdata, handles)
hang = eventdata.Indices;%获取行索引ifisempty(hang)==0%若行索引不为空,表示用户选中表格中的某项
    hangIndex =hang(1,1);%行索引赋值
    handles.hangIndex = hangIndex;%把行索引添加到结构体guidata(hObject, handles);%更新结构体else                        
    handles.hangIndex =-1;%将行索引值设置为默认值-1,表示现在处于未选择状态guidata(hObject, handles);%更新结构体end

按钮

按钮
如上图所示,本程序通过三个按钮“插入”“删除”和“清除”分别实现对应的功能
按钮命名(tag)分别为btn_Addbtn_Delbtn_Clc
对三个按钮的Callback 回调函数进行了编写

1) btn_Add 的Callback回调函数

点击插入按钮,弹出窗口提示用户插入数据,若表格内无数据或用户未选中任何数据,则在最下方插入数据;若用户选中一条数据,则在表格中间插入数据。
在这里插入图片描述

代码如下:

functionbtn_Add_Callback(hObject, eventdata, handles)
global soil_setting;%声明global变量管理表格内容
prompt ={'土层名称','层厚(m)','重度(kN/m3)'};%对话框内容提示
title ='请输入数据';%对话框标题
lines =[140;140;140];%设置输入框行数 为了显示标题这里要将行数改大一点
def ={'填土','2.5','18.5'};%默认值
hangIndex = handles.hangIndex;%获取选择以后传入的行索引%注意:若在uitable的CreateFcn函数中不将handles.hangIndex设置为-1,%则在soil_setting内容为空,需为表格添加第一条数据时,上述代码会报错,提示不存在handles.hangIndexif 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

2) btn_Del 的Callback回调函数

若用户未选中表格的内容,则程序警告,若用户选中某项,则删除。
在这里插入图片描述
代码如下:

functionbtn_Del_Callback(hObject, eventdata, handles)
global soil_setting;
hangIndex = handles.hangIndex;%获取选择以后传入的行索引if hangIndex==-1warndlg('未选中行,无法删除。请选中一行再点击删除','警告');elsesoil_setting(hangIndex,:)=[];%删除选中的某行数据set(handles.utab_soil,'Data',soil_setting);%显示到表格中end

3) btn_Clc 的Callback回调函数

若用户执意清空,则清空。
在这里插入图片描述
代码如下:

functionbtn_Clc_Callback(hObject, eventdata, handles)
global soil_setting;
button=questdlg('你确定清除表格内容吗?','警告','是','否','否');%内容,标题,选项,默认选项ifstrcmp(button,'是')soil_setting(:,:)=[];%删除全部set(handles.utab_soil,'Data',soil_setting);%显示到表格中end

总结:

本程序实现的功能:

1)通过公共变量global soil_setting储存土层表格信息

2)变量与表格信息为空时:

点击插入按钮,表格自动生成第一条内容;
点击删除按钮,程序弹出警告选项,提示用户需选择后再删除

3)当变量与表格中存在内容时:

若用户未选择任何一条内容,点击插入按钮,自动在表格最下方插入;
点击删除按钮,程序弹出警告选项,提示用户需选择后再删除;

若用户已选择某条内容,点击插入按钮,在选中的项目下方插入用户输入的内容,点击删除按钮,则删除该内容。

4)点击清除按钮,程序提示用户,若用户执意清空,则表格清空

本程序存在的bug:

点击插入按钮后,用户单击“取消”或右上角的关闭,程序会报错

因为没有设置接口读取用户的取消操作,后续在此基础上可继续开发

标签: matlab

本文转载自: https://blog.csdn.net/isolate11/article/details/136790652
版权归原作者 Climbing. 所有, 如有侵权,请联系我们删除。

“Matlab GUI的uitable控件实现插入、删除、清空”的评论:

还没有评论