【问题标题】:Setting and getting with uitable设置和获取 uitable
【发布时间】:2018-05-29 13:09:06
【问题描述】:

我正在创建一个 Nx3 uitable,因为当 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:完成按钮回调的编辑

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中

【问题讨论】:

    标签: matlab user-interface matlab-uitable


    【解决方案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 中所建议的那样)您没有提供足够的数据来填充表格的所有列。起初这很令人困惑,直到您查看工作区...

    您希望该变量为 Nx3,但实际上它是 3Nx1!形成DataInput时需要使用逗号连接行,而不是使用分号连接列:

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

    更新后,表格将按预期运行。

    【讨论】:

    • 非常感谢!当我尝试执行 (2) 并在第二列中输入一个数字时,尽管它告诉我我的表格在该位置不可编辑,即使我将该列设置为可编辑。
    • 在 (2) 中你没有编辑表格,所以我不明白你的意思......请发布实际的错误消息
    • 我只是想在表格中手动输入我的数据,然后按完成将它们保存在一个 mat 文件中。虽然当我在表格中输入一个值时,当我按下回车键并移至下一个值时它会消失。出现此橙色警告:Table data is not editable at this location
    • 我的 donebutton_Callback 现在被编辑了,又出现了一个错误Index exceeds matrix dimensions
    • 然后在您的问题中更新它(注意这是一个编辑并将其添加到末尾)或者我无法猜测您为什么会收到错误...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多