如何使 JFileChooser (DIRECTORIES_ONLY) 以文件夹名称中的空白开头?

问题描述 投票:0回答:1

我使用

JFileChooser
让用户选择他们的文件夹。

用户在他们没有预料到的地方触发了执行,因为

JFileChooser
Folder Name:
字段中提供了默认值。具体来说,他们试图单击其他内容,但
JFileChooser
突然出现在他们计划单击的位置下方,导致他们单击
Open
按钮。

通常,我会通过简单地检查他们选择的目录是否是

JFileChooser
选择的默认目录来解决这个问题,但有时用户也想在那里运行东西。只是不是在那个特定时间。

从技术上讲,如果所选内容与默认值相同,我仍然可以弹出警告。但我觉得一个更干净的解决方案是简单地从空白开始,直到用户选择

JFileChooser
上的文件夹。更明显的是,用户并没有选择任何内容。避免再次弹出窗口对于可用性来说更好。

或者,我会接受关闭

Open
按钮的功能,直到他们在对话框中进行一些选择。

最后,我知道可以扩展

JFileChooser
以添加一些自定义逻辑。这似乎就是我的最终解决方案,如果您想提供一个实现,那将是锦上添花。但是,将优先考虑允许我在弹出对话框时简单地清除
Folder Name:
字段(或禁用按钮),而不需要进行继承

如果您发现更好的解决方案,请随时提出替代解决方案。我已经有了一个可行的解决方案(向用户弹出警告,或使用继承),但如果可能的话,我希望有一个更好的解决方案。

这是一个完整的、可运行的示例。

import javax.swing.JFileChooser;
import java.io.File;
import java.nio.file.Path;
public class SOQ_20240309_132700
{
    public static void main(String[] args)
    {
        JFileChooser c = new JFileChooser();

        File dir = Path.of(".").toFile(); //Just pointing to my current directory for example sake. Replace if you like.

        c.setCurrentDirectory(dir); //I need to set the location where the chooser starts from.

        c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);        

        c.setSelectedFile(null); //This doesn't seem to clear out the box

        c.showOpenDialog(null);

        //How do I make the chooser have a starting directory without populating foldername?
        
    }
    
}
java swing jfilechooser usability ui-validate
1个回答
0
投票

如果用户不小心点击了您的对话框,听起来您的对话框让他们感到惊讶。应用程序几乎不应该显示对话框,除非直接响应用户操作。

在用户可能正在使用的其他内容之上弹出一个对话框是很粗鲁的。这就像在他们阅读时从他们手中夺走一本书。他们正在做某事,另一个应用程序决定抢走焦点并接管。

一个好的做法是显示文件选择器以响应用户的按下,例如“加载”或“保存”按钮(或菜单项)。在这种情况下,您的应用程序已经获得焦点,并且该对话框是工作流程(您的应用程序的工作流程)的一部分,已经引起了用户的全部关注。

© www.soinside.com 2019 - 2024. All rights reserved.