Использование uigetfile вместо uigetdir для получения каталогов в Matlab

Итак, у меня есть вопрос о графическом интерфейсе выбора каталога MATLAB. Мне нужно использовать графический интерфейс для выбора каталога, но проблема в том, что интерфейс uigetdir ужасно. Если я позвоню вот так:

blah = uigetfile('C:\...\T2 Measurements');

Это то, что он мне показывает:

uigetdir results

Как видите, это ужасно. Там много посторонней информации о местоположении файла в файловой системе, и соответствующая информация все ниже сгиба. В идеале я хотел бы указать, что функция uigetdir использует графический интерфейс uigetfile или просто передает аргумент uigetfile, сообщая ему, что я ищу каталог, а не отдельный файл, поскольку это то, что Графический интерфейс uigetfile выглядит так:

uigetfile results

Но, конечно, для этого необходимо, чтобы я выбрал файл, а не каталог. Очевидно, что каталоги не открыты, поэтому я полагаю, что я мог бы просто попросить пользователя выбрать любой случайный файл в папке, и я могу получить имя пути, но есть ли лучший способ сделать это? В другом приложении я мог бы представить, что мой "выберите файл в fo lder "обходной путь не сработает.

Обновление

Я внес некоторые очень незначительные изменения в код Эндрю Янке, чтобы он принимал те же аргументы, что и uigetdir (). Вот что я придумал:

function [pathname] = uigetdir2(start_path, dialog_title)
% Pick a directory with the Java widgets instead of uigetdir

import javax.swing.JFileChooser;

if nargin == 0 || start_path == '' || start_path == 0 % Allow a null argument.
    start_path = pwd;
end

jchooser = javaObjectEDT('javax.swing.JFileChooser', start_path);

jchooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if nargin > 1
    jchooser.setDialogTitle(dialog_title);
end

status = jchooser.showOpenDialog([]);

if status == JFileChooser.APPROVE_OPTION
    jFile = jchooser.getSelectedFile();
    pathname = char(jFile.getPath());
elseif status == JFileChooser.CANCEL_OPTION
    pathname = [];
else
    error('Error occured while picking file.');
end
6
задан Bill the Lizard 28 September 2011 в 20:18
поделиться