现在的位置: 首页 > 综合 > 正文

MatlabGUI设计专题一–表格设计

2014年09月05日 ⁄ 综合 ⁄ 共 1313字 ⁄ 字号 评论关闭

  表格Data可以为下列数据类型:数值矩阵、逻辑矩阵、数值单元数组、逻辑单元数组、字符串单元数组,以及由数值、逻辑值和字符串组成的混合单元数组。

%% 创建一个数据如下的表格:
% 1 2 3 4 5
% 2 3 4 5 6
% 3 4 5 6 7
%当选中第4行前5列时,对各列数据进行求和运算,结果放在当前单元格;当选中第6列前3行时,
%对各行数据进行求和运算,结果放在当前单元格;
%当选中数据项时,检查对应行或列是否已经求和,若已经求和,更新求和结果
function mydatasum()
%调用方法:命令行输入datasum然后回车
data = [1:5;2:6;3:7];
data2 = cell(size(data)+1);
data2(1:end-1,1:end-1) = num2cell(data);
figure
uitable('units','normalized','Position',[0.1 0.2 0.85 0.6],'Data',...
    data2,'ColumnEditable',true,'FontSize',10,'CellSelectionCallback',...
    @cellsel_callback,'CellEditCallback',@celledit_callback);
end

%% CellSelectionCallback回调函数
function cellsel_callback(hTab , event)
    if ~isempty(event.Indices)
        data = get(hTab,'Data');
        iLine = event.Indices(1);
        iColumn = event.Indices(2);
        if(iLine == size(data,1) && iColumn <size(data,2))
            data{end,iColumn} = sum(cell2mat(data(1:end-1,iColumn)));
        elseif(iColumn == size(data,2) && iLine < size(data,1))
            data{iLine,end} = sum(cell2mat(data(iLine,1:end-1)))
        end
        set(hTab,'Data',data);
    end
end

%% CellEditCallback 回调函数
function celledit_callback(hTab,event)
    if isempty(event.Error)
        data = get(hTab,'Data');
        iLine = event.Indices(1);
        iColumn = event.Indices(2);
        if(iLine < size(data,1) && iColumn < size(data,2))
            if ~isempty(data{iLine,end})
                data{iLine,end} = sum(cell2mat(data(iLine,1:end-1)));
            end
            if ~isempty(data{end,iColumn})
                data{end,iColumn} = sum(cell2mat(data(1:end-1,iColumn)));
            end
            set(hTab,'Data',data);
        end
    end
end

【上篇】
【下篇】

抱歉!评论已关闭.