如何在Matlab中更改表的行名和列名

时间:2011-06-28 14:47:56

标签: matlab user-interface

我在Matlab中创建了一个GUI,它的外观如下:

enter image description here

我需要知道是否可以在运行时更改表的行名和列名,而不是某些静态名称。

有没有办法做到这一点,或者我怎么能以其他方式做到这一点?

2 个答案:

答案 0 :(得分:4)

如果您的GUI不是使用GUIDE构建的,您可以设置/修改这样的uitable属性(直接来自http://www.mathworks.com/help/techdoc/ref/uitable.html):

f = figure('Position',[200 200 400 150]);
dat = rand(3); 
cnames = {'X-Data','Y-Data','Z-Data'};
rnames = {'First','Second','Third'};
t = uitable('Parent',f,'Data',dat,'ColumnName',cnames,... 
            'RowName',rnames,'Position',[20 20 360 100]);

然后,您可以使用以下命令在执行期间修改列名称:

cnames = {'Z-Data','Y-Data','X-Data'};
set(t,'ColumnName',cnames);

唯一剩下的就是决定哪个事件会触发此修改并编写适当的回调函数。如果您可以提供有关GUI的一些细节,那么它可能很有用。

如果你是通过GUIDE构建你的GUI,我不知道是否可能(我想是的,但我通常更愿意避免使用GUIDE,因此我的知识在这方面有限)。

<强>更新

作为一个例子,我写了一小段代码,显示了这一点。在这种情况下,触发列名称更改的事件是一个按钮,但它可以是任何内容,希望这会有所帮助。

% GUI
function so_uitable
% Layout
figure('units','normalized','position',[0.1 0.1 0.5 0.5],'tag','figure');
data=guihandles(gcf);
uitable('parent',data.figure,'units','normalized', ... 
    'Position', [0.1 0.1 0.35 0.8],'tag','table');
uicontrol('style','pushbutton','string','Change columns names', ... 
    'parent',data.figure,'units','normalized', ... 
    'Position',[0.55 0.8 0.35 0.1],'tag','button', ... 
    'callback',@button_callback);
data=guihandles(gcf); 
% Data
data.matrix=rand(3);
data.cnames={'X-Data','Y-Data','Z-Data'};
set(data.table,'data',data.matrix,'ColumnName',data.cnames);
guidata(gcf,data);
end
% Callback
function button_callback(obj,event)%#ok
data=guidata(gcbf);
n=length(data.cnames);
prompt=cell(n,1);
answer=inputdlg(prompt,'Change columns names',1,data.cnames);
if(~isempty(answer))
    data.cnames=answer;
    set(data.table,'ColumnName',data.cnames);
end
guidata(gcbf,data);
end

答案 1 :(得分:0)

我使用GUIDE创建了一个表,以下代码行能够成功设置行名称:

set(data.table, 'ColumnName',data.cnames);