JFileChooser选择目录但显示文件

Jef*_*rey 17 java swing jfilechooser

我觉得应该有一个简单的方法来做到这一点,但我无法弄清楚.我有一个允许用户选择目录的JFileChooser.我想显示目录中的所有文件以向用户提供一些上下文,但只有目录应被接受作为选择(可能在选择文件时禁用"打开"按钮).有这么简单的方法吗?

abl*_*eul 17

我的解决方案是camickr和trashgod的答案之间的合并:

    final JFileChooser chooser = new JFileChooser() {
            public void approveSelection() {
                if (getSelectedFile().isFile()) {
                    return;
                } else
                    super.approveSelection();
            }
    };
    chooser.setFileSelectionMode( JFileChooser.FILES_AND_DIRECTORIES );
Run Code Online (Sandbox Code Playgroud)


cam*_*ckr 13

覆盖approveSelection()方法.就像是:

JFileChooser chooser = new JFileChooser( new File(".") )
{
    public void approveSelection()
    {
        if (getSelectedFile().isFile())
        {
            // beep
            return;
        }
        else
            super.approveSelection();
    }
};
Run Code Online (Sandbox Code Playgroud)


tra*_*god 13

setFileSelectionMode()如何使用文件挑肥拣瘦:

setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
Run Code Online (Sandbox Code Playgroud)

附录:通过取消注释第73行可以看出效果FileChooserDemo,但它似乎与平台有关.

附录:如果使用FILES_AND_DIRECTORIES,请考虑相应地更改按钮文本:

chooser.setApproveButtonText("Choose directory");
Run Code Online (Sandbox Code Playgroud)

由于效果取决于L&F,请考虑DIRECTORIES_ONLY在已满足您的UI要求的平台上使用:

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
Run Code Online (Sandbox Code Playgroud)