设置和获取合适的

时间:2017-12-15 10:29:11

标签: matlab user-interface matlab-uitable

我正在创建一个Nx3,因为当N很高时,它似乎比多个文本编辑容易得多。我将列初始化为单元格数组,以便最初获得一个空的'表

hinitial = cell(N,1);
hfinal = cell(N,1);
hporosity = cell(N,1);
DataInput = [hinitial;hfinal;hporosity];
ColumnName = {'n_Initial','n_Final','Porosity'};
ColumnFormat = {'numeric', 'numeric', 'numeric'};
ColumnEditable = [false true false];

htable = uitable(fig,'Units','pixels','Position',[20 20 260 204],...
         'Data', DataInput,...
         'ColumnName', ColumnName,...
         'ColumnEditable', ColumnEditable);  

1)使用此按钮,我想将数据循环打印到第一列。

function uploadbutton_Callback(source,eventdata) 
S = load('n.mat');
for K = 1:N
set(htable(K,1),'Data',num2cell(S.n(K)));
end
end

但是这只会打印该列的第一行。然后会显示此错误。

Index exceeds matrix dimensions.
Error in bandprovaprog/uploadbutton_Callback (line 122)
set(htable(K,1),'Data',num2cell(S.n(K)));
Error while evaluating UIControl Callback.

2)在第二列中,我想手动输入数据,然后使用按钮将结果保存在mat文件中。到目前为止我的努力是:

function donebutton_Callback(source,eventdata) 

m = zeros(1,N);
 for J = 1:N
 m(J) = str2double(get(hfinal{J},'String'));  
 end
save('m.mat','m');
end

3)最后一列再次使用set在第三列中打印,所以我想我知道如何做就能做到1)

EDIT2:编辑donebutton_Callback

function donebutton_Callback(source,eventdata) 

 m = zeros(1,N);
 m(1:N) = str2double(htable.Data(1:N,2),'Data'); 
 save('m.mat','m');
end

我想将第二列的内容放入m.mat

1 个答案:

答案 0 :(得分:1)

1)您的set命令似乎很狡猾,将Data设置为会尝试设置所有数据。而只是简单地分配给特定的数据元素

function uploadbutton_Callback(source,eventdata) 
    S = load('n.mat');
    for K = 1:N
        htable.Data{K,1} = S.n(K);
    end 
end

更好的是,矢量化代码并避免循环

function uploadbutton_Callback(source,eventdata) 
    S = load('n.mat');
    htable.Data(1:N,1) = num2cell(S.n(1:N));
end

类似于(2),不要使用get,只需访问上面显示的数据。

修改

您的新问题如下。您正在创建3个Nx1单元阵列,然后将它们连接起来作为数据传递给您的表。在尝试编辑数据的第2列时,您不能,因为您收到以下错误

  

警告:此位置无法编辑表格数据。

这是因为(如this answer中所述)您没有提供足够的数据来填充表格的所有列。一开始这很令人困惑,直到你看到你的工作区......

workspace

您期望该变量为Nx3,而是3Nx1!在形成DataInput时,您需要使用逗号来连接行,而不是使用分号来连接列:

DataInput = [hinitial, hfinal, hporosity];
% Equivalently to remove ambiguity, you could use: 
% DataInput = horzcat(hinitial, hfinal, hporosity)

更新后,表格的行为符合预期。