использование всплывающего меню в uitable в Matlab

Я создал uitable, состоящий, скажем, из четырех столбцов.

colu={{'Sweet' 'Beautiful' 'Caring'},'numeric', 'numeric','numeric'}
dat={1 2 3 []; 4 5 6 []; 7 8 9 []};
A=uitable('outerposition',[0 0 1 1],'ColumnFormat',colu,'Data',dat);

Что я хотел сделать сейчас, так это то, что когда код запускается и я выбираю «Сладкий» во всплывающем окне в первой ячейке, ячейка (1,4) отображает dat (1,1) или когда я выбираю « Beautiful» во второй ячейке первого столбца, в ячейке (2,4) отображается dat(2,1). В отличие от всплывающего меню вне uitable, я не могу использовать get(popup,"value').

Как я мог сделать то, что хотел? Заранее спасибо!


person user3011761    schedule 20.11.2013    source источник
comment
в моем вопросе здесь вы можете найти готовый код - я также мог предположить, что у вас возникают подобные проблемы.   -  person thewaywewalk    schedule 20.11.2013


Ответы (1)


Вам нужно будет использовать свойство CellEditCallback, которое является глобальным обратным вызовом, который запускается при редактировании любой ячейки. Нет никаких обратных вызовов, которые вы можете установить для отдельных ячеек.

Шаблон псевдокода, который поможет вам начать работу:

function cellEditCallback(hTable, editEvent)
    % get changed index
    changedIndex = editEvent.Indices;
    if changedIndex is a popup-cell:
        % check new value
        newValue = editEvent.NewData;
        % set data in appropriate cell to corresponding value
        ...

Кроме того, columnFormat в примере не соответствует данным. Он указывает столбец 1 как всплывающее окно, а по вашим данным это должен быть столбец 4. Мне также пришлось изменить [] на '', чтобы всплывающее окно работало, а set('ColumnEditable', logical([0,0,0,1])).

См., например.

http://www.mathworks.de/products/matlab/examples.html?file=/products/demos/shipping/matlab/uitabledemo.html

для более полного примера подходящего приложения.

person sebastian    schedule 20.11.2013
comment
Нет никаких обратных вызовов, которые вы можете установить для отдельных ячеек. -не согласен, используя индексы, которые вы получаете с обратным вызовом, и небольшой алгоритм переключения / регистра, вы получаете именно это. - person thewaywewalk; 20.11.2013
comment
Конечно, вы можете это сделать, это то, что делает мой пример псевдокода - если вы расширите часть if changedIndex is a .... Я имел в виду попытку/пример ОП get(popup, 'value'). Я не утверждал, что реагировать на действие редактирования для каждой ячейки невозможно, просто для этого нет готовых обратных вызовов. - person sebastian; 20.11.2013
comment
вы правы, меня немного смутила ваша формулировка. Неважно ;) - person thewaywewalk; 20.11.2013