使用GUIDE matlab

时间:2016-03-10 16:16:56

标签: matlab matlab-figure matlab-guide

我有一个GUIDE GUI,

它有一个文件上传按钮。

现在一旦文件被上传,我必须给用户一个机会来订购它们(比如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中。

列表框不允许用户移动字符串字段。那么有什么办法可以让列表框字符串字段移动。或者是否有其他方式可以完成用户交互式文件排序?

1 个答案:

答案 0 :(得分:4)

有几种方法可以解决这个问题。一种常见的方法是在列表框的右侧设置按钮,以及#34;提升"并且"降级"标题将在列表中向上或向下移动当前选定的项目。

以下是一些示例代码。

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 eventsErik Koopmans有一个文件交换条目Reorderable Listbox,可以做到这一点。