我使用
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?
}
}
如果用户不小心点击了您的对话框,听起来您的对话框让他们感到惊讶。应用程序几乎不应该显示对话框,除非直接响应用户操作。
在用户可能正在使用的其他内容之上弹出一个对话框是很粗鲁的。这就像在他们阅读时从他们手中夺走一本书。他们正在做某事,另一个应用程序决定抢走焦点并接管。
一个好的做法是显示文件选择器以响应用户的按下,例如“加载”或“保存”按钮(或菜单项)。在这种情况下,您的应用程序已经获得焦点,并且该对话框是工作流程(您的应用程序的工作流程)的一部分,已经引起了用户的全部关注。