在MATLAB中设置Uitable的位置问题

时间:2014-10-29 16:08:35

标签: matlab matlab-figure matlab-uitable matlab-hg2

我正在尝试在matlab中创建一个uitable。请考虑以下简单示例:

f = figure;
data = rand(3);
colnames = {'X-Data', 'Y-Data', 'Z-Data'};
t = uitable(f, 'Data', data, 'ColumnName', colnames, ...
                   'Position', [20 20 260 100]);

接下来,我尝试设置uitable的宽度和高度以匹配包围矩形的大小:

t.Position(3) = t.Extent(3);
t.Position(4) = t.Extent(4);

但是我收到以下错误:

>> t.Position(3) = t.Extent(3);
t.Position(4) = t.Extent(4);
Attempt to reference field of non-structure array.

当我尝试查看t时,我得到:

>> t

t =

   2.1030e+03

我不知道这个结果意味着什么!我有点困惑,因为这是我第一次使用uitable而且我对MATLAB也很陌生。

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

根据评论,将上述评论转换为答案。

要使示例代码正常运行,您需要MATLAB R2014b或更新版本。根据MATLAB R2014b的release notes graphics handles are now objects and not doubles,使图形对象与MATLAB的其余对象保持一致。对此的一个好处是用户现在能够利用点符号来寻址和设置其图形对象的属性。这是旧版本的更改,其中图形句柄存储为指向相关图形对象的数字ID,要求用户使用getset来访问和修改图形对象属性。

要解决您的问题,您只需修改点符号用法以获取或设置适当的位置。或者升级MATLAB:)

例如,

t.Position(3) = t.Extent(3);
t.Position(4) = t.Extent(4);

变为:

tableextent = get(t,'Extent');
oldposition = get(t,'Position');
newposition = [oldposition(1) oldposition(2) tableextent(3) tableextent(4)];
set(t, 'Position', newposition);