Подходящие логические флажки в MATLAB не проверяются

Я использую GUIDE в MATLAB R2012b, и у меня есть uitable с редактируемыми логическими флажками. Обратный вызов Cell Edit выглядит следующим образом:

function data_table_CellEditCallback(hObject, eventdata, handles)
row = eventdata.Indices(1);
column = eventdata.Indices(2);
if column ~= 1 % The checkboxes are all in the first row.  
    guidata(hObject,handles);
    return;
end
table_data = get(hObject,'Data');
if table_data(row,column) == true
    table_data(row,column) = false;
else
    table_data(row,column) = true;
end
set(hObject, 'Data', table_data);
handles.checked(row) = table_data(row,column); % Variable holding the data.  
guidata(hObject,handles);
end

Когда я нажимаю один из флажков, я вижу, что данные в таблице соответствующим образом обновляются (оба get(hObject,'Data') а также handles.checked(row) вернуть обновленное значение), НО фактический флажок в графическом интерфейсе визуально не проверяется. Если я щелкну по нему еще раз, переменные снова обновятся, но флажок останется непроверенным.

Таким образом, данные обновляются, а графический интерфейс - нет. Что здесь не так?

Примечание: логические флажки установлены в редактируемом GUIDE, так что это не проблема.

1 ответ

Решение

Массив, который вы используете для установки свойства Data для сетки данных, обычно представляет собой массив ячеек.

Когда обратный вызов выполнен, значения в массиве будут отражать текущее состояние флажков. То есть вам не нужно устанавливать их.

Если вы хотите установить table_data, вы должны использовать что-то вроде:

 table_data{row,column} = eventdata.NewData;

Кстати, я предполагаю, что вы установили формат столбца "Логический" в редакторе свойств таблицы направляющих.

Другие вопросы по тегам