2016-03-10 2 views
1

У меня есть GUIDE GUI,Пользовательская интерактивная сортировка файлов в заказе с использованием GUIDE matlab

У этого есть кнопка загрузки файла.

Теперь, когда файлы загружены, я должен предоставить пользователю оппортунистичность для их заказа (например, file1 file2 file3 ..., который должен быть первым, а какой должен быть вторым и т. Д.).

Моя функция загрузки файла выглядит

function pbu_Callback(hObject, eventdata, handles) 

[FileName,PathName,FilterIndex] = uigetfile('*.fig' , 'SELECT FILES TO UPLOAD','MultiSelect','on'); 
output = cellfun(@(x) {horzcat(x)},FileName); 

    handles.files = output; 
    guidata(hObject, handles); 

filesortgui; 
end 

Теперь моя filesortgui это всплывающее GUI, который позволяет пользователю сортировать файлы, однако он хочет.

Это filesortgui.m

function filesortgui 

S.filesortfigure = figure('units','pixels',... 
       'position',[600 600 600 400],... 
       'menubar','none',... 
       'name','Input Files Sorting',... 
       'numbertitle','off',... 
       'resize','off'); 


hGui = findobj('Tag','fig'); 
handles = guidata(hGui); 


handles.files(1) 
handles.files(2) 

end 

Так что я могу получить имена файлов в мою всплывающей GUI.

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

+0

Почему вы думаете, что есть как [matlab-guide], так и тег [guide]? (Подсказка: вторая - это не то, что вы думаете. Пожалуйста, прочитайте описания тегов перед их использованием.) –

+0

@AndrasDeak ... ok – statisticalbeginner

ответ

3

Есть несколько способов приблизиться к этому. Один общий подход состоит в том, чтобы иметь кнопки справа от списка с заголовками «promotion» и «demote», которые перемещают выбранный элемент вверх или вниз по списку.

Вот пример кода для этого.

function reorderlist() 

    items = {'File1.png', 'File2.png', 'File3.png'}; 
    hfig = figure(); 

    hlist = uicontrol('Parent', hfig, 'style', 'listbox', 'string', items); 

    set(hlist, 'units', 'norm', 'position', [0 0 0.75 1]) 

    promote = uicontrol('Parent', hfig, 'String', '^'); 
    set(promote, 'units', 'norm', 'position', [0.8 0.75 0.15 0.15]) 

    demote = uicontrol('Parent', hfig, 'String', 'v'); 
    set(demote, 'units', 'norm', 'position', [0.8 0.55 0.15 0.15]) 

    % Set button callbacks 
    set(promote, 'Callback', @(s,e)moveitem(1)) 
    set(demote, 'Callback', @(s,e)moveitem(-1)) 

    function moveitem(increment) 
     % Get the existing items and the current item 
     items = get(hlist, 'string'); 
     current = get(hlist, 'value'); 

     toswap = current - increment; 

     % Ensure that we aren't already at the top/bottom 
     if toswap < 1 || toswap > numel(items) 
      return 
     end 

     % Swap the two entries that need to be swapped 
     inds = [current, toswap]; 
     items(inds) = flipud(items(inds)); 

     % Update the order and the selected item 
     set(hlist, 'string', items); 
     set(hlist, 'value', toswap) 
    end 
end 

Это даст вам нечто подобное.

enter image description here

Другой вариант заключается в использовании базового объекта Java и respond to mouse events. Erik Koopmans имеет запись обмена файлами, Reorderable Listbox, которая в состоянии сделать именно это.

+0

Спасибо за ответ. – statisticalbeginner