我使用JFileChooser来让用户 Select 他们的文件夹.

用户在他们意想不到的地方触发了执行,因为JFileChooserFolder Name:字段中提供了默认值.具体地说,他们试图点击其他东西,但JFileChooser就在他们计划点击的地方下方弹出,导致他们点击了Open按钮.

通常,我会通过简单地判断他们 Select 的目录是否是JFileChooser Select 的默认目录来解决这个问题,但有时用户也想在那里运行一些东西.只是不是在那个特定的时间.

从技术上讲,如果 Select 的内容与默认设置相同,我仍然可以弹出警告.但我觉得一个更干净的解决方案是从空白开始,直到用户在JFileChooser上 Select 一个文件夹.更明显的是,用户并不想 Select 任何东西.避免再次弹出窗口对可用性更好.

outlining the field I am talking about

或者,我会接受关闭Open按钮的能力,直到他们在对话框上做出某种形式的 Select .

最后,我知道可以 Select 扩展JFileChooser来添加一些定制逻辑.这似乎是我的最终解决方案,如果您想提供一个实现,那将是锦上添花.然而,优先考虑允许我在对话框弹出时简单地清除Folder Name:字段(或禁用按钮)102的答案.

如果您看到了更好的前进方向,请随时建议替代解决方案.我已经有了一个有效的解决方案(向用户弹出一个警告,或者使用继承),但如果可能的话,我想要一个更好的解决方案.

这里有一个完整的、可运行的例子.

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?
        
    }
    
}

推荐答案

如果用户不小心点击了你的对话框,听起来就像是你的对话框让他们大吃一惊.应用程序几乎不应该显示对话框,除非直接响应用户操作.

在用户可能一直在做的其他事情上弹出一个对话框是不礼貌的.这就像他们一边看书,一边从手中拽出一本书.他们正在做一些事情,另一个应用程序决定抢占焦点并接管.

一种好的做法是显示一个文件 Select 器,以响应用户的按下,例如,加载或保存按钮(或菜单项).在这种情况下,您的应用程序已经具有焦点,并且该对话框是用户已经完全关注的工作流(您的应用程序的工作流)的一部分.

Java相关问答推荐

Java中是否有某种类型的池可以避免重复最近的算术运算?

编译多个.Java文件并运行一个依赖于用户参数的文件

Java编译器抛出可能未正确初始化的错误?

如何让DTO接受空字符串字段,但如果它们不为空,则应用JPA验证?

Java中将文本拆分为数字或十进制数字和字符串

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

在执行流和相关操作时,使用Java泛型为2个方法执行相同的操作,但对象不同

我怎样才能让IntelliJ标记toString()的任何实现?

为什么Collectors.toList()不能保证易变性

将JSON字符串转换为Java类

try 使用类来包含JSON响应

嘲笑黄瓜中的对象

在缺少字段时使用Jackson With Options生成Optional.Empty()

使用MediaPlayer类在一段时间后停止播放音乐

无法在IntStream上应用Collectors.groupingBy

如何使用Java ZoneID的区域设置?

Java CDI:@Singleton@Startup@Inject无法实现接口

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

ANTLR 接受特殊字符,例如 .标识符或表达式中的(点)和 ,(逗号)

Swagger.io OpenApi v3.0 声明默认媒体类型