我在Matlab中创建了一个GUI,它的外观如下:
我需要知道是否可以在运行时更改表的行名和列名,而不是某些静态名称。
有没有办法做到这一点,或者我怎么能以其他方式做到这一点?
答案 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);