Проблема с настройкой позиции Uitable в MATLAB

Я пытаюсь создать uitable в Matlab. Рассмотрим следующий простой пример:

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.

Любая помощь будет оценена по достоинству. Спасибо!


person Mayou    schedule 29.10.2014    source источник
comment
У вас есть MATLAB R2014b? Точечная нотация для доступа и настройки свойств объекта была введена в R2014b и не работает в более ранних версиях. В качестве альтернативы см. set и get.   -  person excaza    schedule 29.10.2014
comment
@excaza: ну, это очень интересный момент, а я об этом не знал! если вы хотите опубликовать это просто как небольшой ответ, я бы дал вам +1 :) и если кто-то другой будет искать что-то подобное, он или она может найти ответ на этой странице ..   -  person Lucius II.    schedule 06.11.2014


Ответы (1)


Согласно комментариям, переводя мой комментарий выше в ответ.

Чтобы пример кода работал правильно, вам потребуется MATlAB R2014b или новее. Согласно примечаниям к выпуску для MATLAB R2014b, графические дескрипторы теперь являются объектами, а не двойниками, в результате чего графические объекты в соответствии с остальными объектами MATLAB. Одним из преимуществ этого является то, что теперь пользователь может использовать точечную нотацию для адресации и установки свойств своих графических объектов. Это отличие от более старых версий, в которых графические дескрипторы сохранялись в виде числового идентификатора, указывающего на соответствующий графический объект, что требовало от пользователя использования get и set для доступа и изменения свойств графического объекта.

Чтобы решить вашу проблему, вам просто нужно изменить использование точечной нотации, чтобы получить или установить, где это необходимо. Или обновить 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);
person excaza    schedule 06.11.2014