MatlabGUI設計專題一--表格設計

兔美醬xz發表於2014-03-12

  表格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


相關文章