2017-11-28 12 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

uitableDataパラメータがcellの場合は、内部で文字列(文字配列)を使用する場合は、

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 
関連する問題