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

这篇具有很好参考价值的文章主要介绍了Matlab GUI的uitable控件实现插入、删除、清空。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引子

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

参考

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

表格创建

本程序的界面如下图所示

matlab gui 的table,matlab

1) 公共变量soil_setting

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

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

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

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

查看回调函数

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

matlab gui 的table,matlab

表格回调函数的修改

本程序对uitable的CreateFcnCellSelectionCallback进行了修改

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

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

按钮

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

1) btn_Add 的Callback回调函数

点击插入按钮,弹出窗口提示用户插入数据,若表格内无数据或用户未选中任何数据,则在最下方插入数据;若用户选中一条数据,则在表格中间插入数据。
matlab gui 的table,matlab

代码如下:

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

2) btn_Del 的Callback回调函数

若用户未选中表格的内容,则程序警告,若用户选中某项,则删除。
matlab gui 的table,matlab
代码如下:

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

3) btn_Clc 的Callback回调函数

若用户执意清空,则清空。
matlab gui 的table,matlab
代码如下:

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

总结:

本程序实现的功能:

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

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

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

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

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

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

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

本程序存在的bug:

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

因为没有设置接口读取用户的取消操作,后续在此基础上可继续开发文章来源地址https://www.toymoban.com/news/detail-848230.html

到了这里,关于Matlab GUI的uitable控件实现插入、删除、清空的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【matlab常用的清空命令】

    注:1-5一般用在程序开头: 1.clc:清空 命令行窗口 中的内容; 2.clear:清空 工作空间workspace 中的所有变量; 3.clear all:清除 工作空间 的所有变量,函数,和MEX文件(比clear更彻底); 4.clf/clf (table_name) : 清除 所有图表的内容 /清除 特定图表table_name 的内容; 5.close all:关

    2024年02月16日
    浏览(26)
  • 数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)

    目录  一.什么是链表 二.链表的实现 节点的插入 头插法 尾插法 指定位置插入 节点的删除 删除第一次出现的节点 删除所有节点 节点的查找 链表的清空 链表的长度 前言: 在上一篇文章中,我们认识了线性数据结构中的顺序表,而本篇文章则是介绍线性数据结

    2024年02月05日
    浏览(57)
  • 【GUI】使用PID控制器进行台式过程控制实验,以保持热敏电阻的温度(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、操作说明 本实验是温度控制的反馈控制应用。特别是,本实验讲解: 手动和自动控制的区别 生成动态数据的 步进测试 拟合动态数据以构建简单的一阶加死区时间 (FOPDT) 模型 从标准调整规则 获取 PID 控制的 参数

    2024年02月15日
    浏览(48)
  • 【单谐波非线性振动问题求解器 GUI 】使用单个谐波表示解决 MDOF 非线性振动问题(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 对于解决多自由度(MDOF)非线性振动问题,使用单个谐波表示是一种常见的近似方法。这种方法将系统的非线性部分在谐波振动的基础上线性化,从而简化求解过程。 以下是一个基于GUI的单谐波非线性振动问题

    2024年02月15日
    浏览(40)
  • MATLAB App Designer基础教程 Matlab GUI入门(四)

    绘制函数图像 显示图像(jpg png tiff) App designer中 plot 和命令行中的 plot函数的不同; 如何在坐标轴空间中显示两个函数图像; 智能缩进 (Ctrl + I) 颜色选项: r -红色 g - 绿色 b - 蓝色 w - 白色 k - 黑色 去除边框技巧(隐藏边框技巧),界面设置(代码设置)框样式 更改网格

    2024年02月12日
    浏览(43)
  • 旋转指针分区对干扰以及移除/插入机器人的鲁棒性的模拟研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、文档讲解

    2024年02月03日
    浏览(37)
  • 【MATLAB GUI】导入音频

    ——标准化打开选择文件对话框 使用形式: [filename, pname]=uigetfile(\\\' .wav\\\',\\\'选择音频文件\\\'); 解释: [返回的文件名,返回文件的路径名] \\\'选择的文件类型\\\'%多个文件类型用{}引住 \\\'选择音频文件\\\'%打开对话框的标题 [y,fs] = audioread(filename);%y为保存的音频数据 sound(y);%默认采样

    2023年04月08日
    浏览(39)
  • 【MATLAB】GUI初步设计

    为了完成图像处理的作业,简直就是生活不易啊 找到一个很棒的教学视频 基于MATLAB的GUI界面设计流程讲解 由于在写博文之前我已经创建好文件了,所以现在完全是展示作用 工具区域 我不认为很久之后我就会忘记这些功能按键是干嘛的,不解释了。 唯一值得注意的只有图片

    2024年04月27日
    浏览(28)
  • Matlab(GUI程式设计)

    目录 1.MatlabGUI  1.1 坐标区+普通按钮  1.1.1 对齐组件  1.1.2 按钮属性 1.1.3 脚本说明  1.1.4 选择呈现  1.3 编译GUI程序 在以前的时候,我们的电脑还是这样的  随着科技的不断进步,我们的电脑也发生着翻天覆地的改变1990s: 在未来,我们的电脑可能是这样的:  今天我们来学

    2024年02月10日
    浏览(31)
  • Excel处理控件Aspose.Cells教程:Java 在 Excel 中插入和删除行和列

    Aspose.Cells 是Excel电子表格编程API,可加快电子表格的管理和处理任务,支持构建能够生成,修改,转换,呈现和打印电子表格的跨平台应用程序。同时不依赖于Microsoft Excel或任何Microsoft Office Interop组件, Aspose API 支持旗下产品覆盖文档、图表、PDF、条码、OCR、CAD、HTML、电子

    2024年02月01日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包