2017-11-28 2 views
1

사용자가 입력 내용을 목록에 추가하거나 제거 할 수있는 함수를 만듭니다. 이 경우에는 uitable. (Matlab) 사실, 다음 코드는 초안이었고 아이디어 만 생각했습니다. 누구나 비슷한 예를 알고 있습니까?uitable을 사용하여 행렬에서 문자를 얻는 방법

(edit_com : 제거 : delete_com 추가)

% to add an input to a list 
function edit_com_Callback(hObject, eventdata, handles) 
value = get(handles.insert_com, 'String'); %user input (char) 
data = get(handles.uitable1, 'Data') % read table matrix 
data(end+1,:) = 0; % add below the data matrix sequently. 
% this is for test and I want to put an char input instead of numbers. 
set(handles.uitable1, 'Data',data); 

% cell selection function before a delete function 
function uitable1_CellSelectionCallback(hObject, eventdata, handles) 
    % no selection 
if (numel(eventdata.Indices) == 0) 
% only one selected 
elseif (numel(eventdata.Indices) == 1) 
set(handles.delete_com, 'Enable', 'on'); % "delete" buttion activate 
selected_com = eventdata.Indices(1); % read currently selected row 
set(handles.edit_com, 'UserData', selected_com); 
     % more than 2 selected 
else 
set(handles.delete_come, 'Enable', 'on'); % "delete" buttion activate 
selected_com = eventdata.Indices(:,1); % read currently selected rows 
set(handles.edit_com, 'UserData', selected_com); 
end 

% deletion part 
function delete_com_Callback(hObject, eventdata, handles) 
if get(handles.edit_com, 'UserData') ==0 % none selected 
else if get(handles.edit_com, 'UserData') ==1 % one selected 
data = get(handles.uitable1, 'Data') % 
    data(row_1,:)=[]; % delete 
else % more than one selected 
data = get(handles.uitable1, 'Data') 
    data(row_2,:)=[]; % delete them 
end 

먼저는 (사용자 데이터로 분리) 세포에서 여러 세포를 분리 한 다음 분리한다. 나는 단지 어떤 열이 선택되었는지 알아 내려고하고 있으며, 나는 그것을 함수에서 지우려고한다. 문자로 구성되어 있고 셀 처리 방법을 모르므로 다루기가 어렵습니다. 시작하는 가장 좋은 방법은 무엇입니까?

답변

0

당신이 유형 cell 당신의 uitableData 매개 변수의 존재에 패스 내부 문자열 (문자 배열)을 사용하려면, 예를 들어;

data = cell(10,10); % a 10-by-10 empty cell matrix 
set(handles.uitable1,'Data',data); 

나 :

function edit_com_Callback(hObject, eventdata, handles) 
    value = get(handles.insert_com,'String'); 

    data = get(handles.uitable1,'Data'); 
    data(end+1,:) = {value}; 

    set(handles.uitable1,'Data',data); 
end 

그리고 무엇을 : 행의 추가에 관한 것을 위해 지금

% Here you should disable your delete button when nothing is selected, 
% and enable it back when something is selected. Your indices data should 
% always be kept up-to-date. You don't need to handle too many cases, 
% "something selected" and "nothing selected" is enough. 

function uitable1_CellSelectionCallback(hObject,eventdata,handles) 
    if (isempty(eventdata.Indices)) 
     set(handles.delete_com,'Enable','off'); 
     rows = []; 
    else 
     set(handles.delete_com,'Enable','on'); 
     rows = eventdata.Indices(:,1); 
    end 

    set(handles.edit_com,'UserData',rows); 
end 

: 주요 기능에 관한 것을 들어

data = repmat({'hi'},10,10); % a 10-by-10 matrix of cells containing the string "hi" 
set(handles.uitable1,'Data',data); 

행 제거와 관련된 문제 :

function delete_com_Callback(hObject, eventdata, handles) 
    data = get(handles.uitable1,'Data'); 
    rows = get(handles.edit_com,'UserData'); 

    idx = (1:size(data,1))'; 
    idx(rows) = []; 
    data = data(idx,:); 

    set(handles.uitable1,'Data',data); 
end 
관련 문제