Итак, у меня есть вопрос о графическом интерфейсе выбора каталога MATLAB. Мне нужно использовать графический интерфейс для выбора каталога, но проблема в том, что интерфейс uigetdir ужасно. Если я позвоню вот так:
blah = uigetfile('C:\...\T2 Measurements');
Это то, что он мне показывает:
Как видите, это ужасно. Там много посторонней информации о местоположении файла в файловой системе, и соответствующая информация все ниже сгиба. В идеале я хотел бы указать, что функция uigetdir использует графический интерфейс uigetfile или просто передает аргумент uigetfile, сообщая ему, что я ищу каталог, а не отдельный файл, поскольку это то, что Графический интерфейс uigetfile выглядит так:
Но, конечно, для этого необходимо, чтобы я выбрал файл, а не каталог. Очевидно, что каталоги не открыты, поэтому я полагаю, что я мог бы просто попросить пользователя выбрать любой случайный файл в папке, и я могу получить имя пути, но есть ли лучший способ сделать это? В другом приложении я мог бы представить, что мой "выберите файл в 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