我有一个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中。
列表框不允许用户移动字符串字段。那么有什么办法可以让列表框字符串字段移动。或者是否有其他方式可以完成用户交互式文件排序?
答案 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
那会给你这样的东西。
另一个选择是依赖底层Java对象和respond to mouse events。 Erik Koopmans有一个文件交换条目Reorderable Listbox,可以做到这一点。