我想知道它有一種方法可以將文件從Windows資源管理器拖放到我的GUI中。Matlab從Windows資源管理器拖放文件到圖(gui)
目標應該是獲取文件路徑(或文件夾路徑),並能夠使用我自己的加載函數加載它。
我確定我在Windows 10 64位中使用了Matlab 2015b。
編輯我的帖子給的什麼,我試圖做一個代碼示例(基於亞伊爾奧特曼的解決方案和其他在網上查到):
function demo
% Set-up a figure droppable axis
hFig = figure('name','DND example','numbertitle','off');
hAx1 = axes('position',[.1,.1,.8,.8]);
% Enable drop on the figure axis
dnd = handle(java.awt.dnd.DropTarget(),'callbackProperties');
jFrame = get(hFig,'JavaFrame');
jAxis = jFrame.getAxisComponent;
jAxis.setDropTarget(dnd);
set(dnd,'DropCallback',{@dndCallbackFcn,hFig, hAx1});
set(dnd,'DragOverCallback',@dndCallbackFcn);
end
function dndCallbackFcn(varargin)
persistent transferable
eventData = varargin{2};
if eventData.isa('java.awt.dnd.DropTargetDropEvent') %nargin>2
hFig = varargin{3}; % my figure is passed as the third argument
try
eventData.acceptDrop(eventData.getDropAction);
transferable = eventData.getTransferable;
catch
end
dataFlavorList = java.awt.datatransfer.DataFlavor.javaFileListFlavor;
fileList = transferable.getTransferData(dataFlavorList);
%{
I want here to get back the file path and then call my loading function
%}
end
end
我一直在該行得到一個錯誤:
fileList = transferable.getTransferData(dataFlavorList);
的錯誤是:
Java exception occurred:
java.awt.dnd.InvalidDnDOperationException: No drop current
at sun.awt.dnd.SunDropTargetContextPeer.getTransferData(Unknown Source)
at sun.awt.datatransfer.TransferableProxy.getTransferData(Unknown Source)
at java.awt.dnd.DropTargetContext$TransferableProxy.getTransferData(Unknown Source)
您可以編寫一個實現了功能的java組件,並使用'javacomponent'加載它。在這裏解釋:http://undocumentedmatlab.com/blog/javacomponent – Daniel
如果您要拖放一個mfile以將其打開,請將其拖放到編輯器中而不是主窗口中。 – boxofchalk1
@ user3786899,我不是加載一個mfile文件,而是一個所有者文件格式;此外,我的GUI中沒有任何編輯器。 – Romain