7

在 MATLAB 中,有一个函数会提示用户选择一个或多个文件 - uigetfile,还有另一个函数允许用户选择一个文件夹 - uigetdir

我想为用户提供使用单个窗口选择文件文件夹的能力,因为这对于我尝试创建的 UX 很重要。

到目前为止,我发现使用上述函数1的唯一解决方案需要一个额外的步骤,即提前询问用户他们想要选择什么类型的实体,并相应地调用适当的函数——我觉得这很不方便。

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

4

1 回答 1

6

我们可以为此使用 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具有多种有趣的设置,例如多选显示隐藏文件/文件夹,以及更改对话框标题、按钮文本工具提示等标准设置。它也可以用作“打开”对话框或“保存”对话框只需设置一个值

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

于 2018-07-20T10:54:46.797 回答