创建一个用户可以选择文件或文件夹的对话框

Dev*_*-iL 7 matlab user-interface user-experience filechooser matlab-gui

在MATLAB中,有一个提示用户选择一个或多个文件uigetfile的功能- 还有另一个允许用户选择文件夹的功能 - uigetdir.

我想向用户提供选择的能力或者一个文件文件夹,使用单一窗口,因为这是对UX我试图创造重要.

到目前为止,我发现使用上述功能1的唯一解决方案需要额外的步骤,要求用户提前选择他们想要选择的实体类型,并相应地调用相应的功能 - 我觉得不方便.

那我怎么能有一个允许我选择其中一个的对话框呢?

Dev*_*-iL 6

具体来说JFileChooser,我们可以使用Java组件,并确保为它提供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
Run Code Online (Sandbox Code Playgroud)

这产生了一个熟悉的对话框,如下所示,它完全符合预期:

选择对话框

JFileChooser有多种有趣的设置,如多选显示隐藏文件/文件夹,以及标准设置,如更改对话框标题,按钮文本工具提示等.它也可以用作"打开"对话框或只需设置一个值即可"保存"对话框.

在R2018a上测试,使用Java 1.8.0_144(输出java.lang.System.getProperty("java.version")).