Создание диалога, в котором пользователь может выбрать либо файл, либо папку

В MATLAB есть функция, которая предлагает пользователю выбрать один или несколько файлов — uigetfile< /a>, и есть еще одна функция, позволяющая пользователю выбрать папку — uigetdir< /а>.

Я хотел бы предоставить пользователю возможность выбрать либо файл, или папку, используя одно окно, так как это важно для UX, который я пытаюсь создать. .

Пока единственное решение, которое я нашел, использует вышеуказанные функции1. требует дополнительного шага, чтобы заранее спросить пользователя, какой тип сущности он хотел бы выбрать, и соответственно вызвать соответствующую функцию, что я считаю неудобным.

Итак, как я могу иметь диалог, который позволяет мне выбрать любой из них?


person Dev-iL    schedule 20.07.2018    source источник


Ответы (1)


Для этого мы можем использовать компонент Java, а именно JFileChooser, и убедитесь, что мы предоставили ему флаг выбора FILES_AND_DIRECTORIES.

%% Select entity:
jFC = javax.swing.JFileChooser(pwd);
jFC.setFileSelectionMode(jFC.FILES_AND_DIRECTORIES);
returnVal = jFC.showOpenDialog([]);
switch returnVal
  case jFC.APPROVE_OPTION
    fName = string(jFC.getSelectedFile());
  case jFC.CANCEL_OPTION
    % do something with cancel
  case jFC.ERROR_OPTION
    % do something with error
  otherwise
    throw(MException("fileFolderChooser:unsupportedResult", ...
                     "Unsupported result returned from JFileChooser: " + returnVal + ...
                     ". Please consult the documentation of the current Java version (" + ...
                     string(java.lang.System.getProperty("java.version")) + ")."));
end

%% Process selection:
switch true % < this is just some trick to avoid if/elseif
  case isfolder(fName)
    % Do something with folder
  case isfile(fName)
    % Do something with file
  otherwise
    throw(MException('fileFolderChooser:invalidSelection',...
                     'Invalid selection, cannot proceed!'));
end

Это создает знакомый диалог, как показано ниже, который работает точно так, как ожидалось:

Диалог выбора

JFileChooser имеет множество интересных настроек, таких как множественный выбор и отображение скрытых файлов/папок, а также стандартные настройки, такие как изменение заголовка диалога, кнопка тексты и подсказки и т. д. Его также можно использовать как диалоговое окно «Открыть» или диалоговое окно «Сохранить», просто нажав < href="https://docs.oracle.com/ javase/8/docs/api/javax/swing/JFileChooser.html#setDialogType-int-" rel="noreferrer">задание значения.

Протестировано на R2018a с Java 1.8.0_144 (выход java.lang.System.getProperty("java.version")).

person Dev-iL    schedule 20.07.2018
comment
Взлом MATLAB, а - person Ander Biguri; 20.07.2018