使 JFileChooser 选择文件名文本而不是扩展名

2024-02-06

我希望 JFileChooser 保存对话框的文件名字段中的文本仅选择文件名而不是扩展名。

我目前有这个:

并希望它看起来像这样:

这是一个简单的更改,但在我看来,它使保存文件变得更加容易,因为用户可以立即开始输入文件名,而不会意外删除扩展名。

我知道如果扩展名丢失,我可以强制添加它,但我不想这样做,因为扩展名不是强制性的,而且我认为不应该强制执行。

那么,我有什么办法可以实现这一目标吗?


API 不直接提供此功能,但一种简单的方法是扫描组件层次结构,寻找JTextField然后更改该文本字段的选择。

以下是该解决方案的示例:

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestJFileChooser {

    public TestJFileChooser() {

    }

    protected void initUI() {
        JFrame frame = new JFrame(TestJFileChooser.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JButton button = new JButton("Click me");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                chooser.setSelectedFile(new File(chooser.getCurrentDirectory(), "save.dat"));
                final JTextField textField = getTexField(chooser);
                if (textField != null) {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            String text = textField.getText();
                            if (text != null) {
                                int index = text.lastIndexOf('.');
                                if (index > -1) {
                                    textField.setSelectionStart(0);
                                    textField.setSelectionEnd(index);
                                }
                            }
                        }
                    });
                }
                chooser.showSaveDialog(button);
            }

            private JTextField getTexField(Container container) {
                for (int i = 0; i < container.getComponentCount(); i++) {
                    Component child = container.getComponent(i);
                    if (child instanceof JTextField) {
                        return (JTextField) child;
                    } else if (child instanceof Container) {
                        JTextField field = getTexField((Container) child);
                        if (field != null) {
                            return field;
                        }
                    }
                }
                return null;
            }
        });
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TestJFileChooser fc = new TestJFileChooser();
                fc.initUI();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 JFileChooser 选择文件名文本而不是扩展名 的相关文章

随机推荐

  • java 具有透明度的全屏窗口

    我正在尝试使用 Java 创建一个覆盖整个屏幕的全屏窗口 这个窗口还必须有一定的透明度 大约30 50 透明 当我说整个屏幕时 我的意思是它覆盖了所有内容 包括 OSX Linux Windows 中的扩展坞 任务栏 菜单栏 当我说透明度时
  • Autofac - 将属性注入 asp.net mvc 控制器

    我有一个基本控制器 它继承了我的所有控制器 这个基本控制器有一些属性 我想使用属性注入来注入 我的控制器注册看起来像这样 builder RegisterControllers Assembly GetExecutingAssembly 我
  • 在 ListView 布局模板中显示总计

    我使用 ListView 控件 ASP NET 2008 来显示一堆数据行 在底部我想要一些总计 我最初打算在 LayoutTemplate 中定义页眉和页脚 并使用一些本地函数 即 获取总计 但 LayoutTemplate 似乎不处理
  • 如何使用 java Firebase Admin SDK 将分析标签添加到数据消息?

    自 7 月 1 日起 Firebase 要求向消息添加标签 以便分析显示数据消息发送的数量等 从 2019 年 7 月 1 日星期一开始 您将能够通过分析标签过滤数据 在该日期之后 没有分析标签发送的数据消息可能不会在此仪表板中显示 问题是
  • 连续检查队列

    我想要一个函数来在一个线程上连续检查队列是否有新添加 显然 可以选择连续循环睡眠 但我想要一些不那么浪费的东西 我考虑了某种类型的等待句柄 然后让队列向它发出信号 但我无法安全地覆盖 Enqueue 因为它不是虚拟的 现在我正在考虑封装一个
  • 奇怪的重复出现的模板和模板参数相关的子类化问题

    我正在尝试使以下代码工作 template lt class derived class object typename derived Object gt struct Base using Derived derived using O
  • Scala:通过依赖注入协调类型类

    最近 Scala 博主们似乎对类型类模式 其中一个简单的类具有由符合某些特征或模式的附加类添加的功能 作为一个过于简单化的例子 简单的类 case class Wotsit value Int 可以适应 Foo 特征 trait Foo T
  • Next.js 应用程序错误:发生客户端异常(有关更多信息,请参阅浏览器控制台)

    尝试加载呈现从外部 API 提取的产品信息的页面时看到上述错误 错误仅发生在生产环境中 本地一切运行正常 检查控制台时出现此错误 TypeError undefined is not a function near n map Next B
  • Rails 3 Web 字体 (woff) mime 类型

    我们从静态资产中提供一些网络字体 woff 我想设置正确的 mime 类型 application x font woff 我尝试这样做config initializers mime types rb但它没有效果 Mime Type re
  • 是否可以使用 itextSharp 将 PDF 页面转换为图像?

    您好 我一直在 dot net 中的所有 pdf 相关项目中使用 itextSharp 我遇到了一个需要将 PDF 页面转换为图像的需求 我找不到任何此类事情的样本 我发现另一个工具 Ghostscript 能够做到这一点 问题是我在共享主
  • 如何让WebStorm IDE正确识别文件类型?

    的背景 在 JetsBrains WebStorm IDE 中 最初我创建了一个名为HelloWorldContainer 不小心遗漏了 js扩展 我的意思是创建HelloWorldContainer js WebStorm 询问我希望该文
  • 闪亮的数据表:禁用某些行的行选择

    我正在尝试确定是否有可能shiny DataTable对某些行禁用行选择 使用selection的参数DT datatable我可以预先选择行 确定用户是否选择行或列或两者 并完全禁用选择 但我不清楚是否可以指示要排除的特定行 这可能吗 R
  • Google 地图 API 3refererNotAllowedMapError

    我对 Google Maps APi 并不陌生 并且已经使用它很多年了 但我很困惑 我已经安装了 Google Maps Javascript API 的最新代码示例的精确副本 简单地图 然后 我从 Google Developers Co
  • 使用 Spring Data MongoDB 在 MongoDB 中对存储为 BigDecimal 类型的数值进行排序

    我正在通过教程学习 Spring Data MongoDB https spring io guides tutorials data 2 https spring io guides tutorials data 2 在本教程中 成本类型
  • 如何根据新的安全策略在.Net中发送电子邮件?

    为了更好地保护您的用户 GMail 和其他邮件提供商建议将我们的所有应用程序升级到 OAuth 2 0 我说得对吗 这意味着System Net Mail不再工作了 我们需要使用另一个库 比如MailKit 一般来说 我试图了解如何在不允许
  • Webkit 动画在 iPad 上的表现

    基于 webkit 的转换 动画会影响 iPad 上的 JS 性能吗 是否有一个单独的图形处理器来处理 webkit 的东西 基本上我正在开发一个带有一些简单的 webkit 动画的程序 但是其中有很多动画 我想我必须删除这些动画 因为它使
  • TLS v1.2 上的 Android 客户端/服务器

    我正在尝试在服务器和 Android 客户端之间创建 TLS v1 2 通信 我建立了 TLS v1 0 连接 但遇到任何问题 但无法获取 v1 2 这是服务器代码 char passphrase myComplexPass1 toChar
  • Amazon s3 .NET SDK,您尝试访问的存储桶必须使用指定的终端节点进行寻址

    我在 Widows Phone 8 应用程序中使用 amazon NET SDK 来上传图像 代码工作正常 现在出现异常 您尝试访问的存储桶必须使用 指定的端点 请将所有未来请求发送到此端点 我已经更新到最新版本的 SDK 2 0 2 2
  • Mopub 广告未展示

    我已经被一个问题困扰了一段时间 但我无法弄清楚它是什么 问题是我最近更新了Mopub Android SDK以及插页式 横幅广告 AdMob and 千禧年媒体 在此之前工作正常 现在 这些广告在发布版本中不起作用 但在调试版本中确实有效
  • 使 JFileChooser 选择文件名文本而不是扩展名

    我希望 JFileChooser 保存对话框的文件名字段中的文本仅选择文件名而不是扩展名 我目前有这个 并希望它看起来像这样 这是一个简单的更改 但在我看来 它使保存文件变得更加容易 因为用户可以立即开始输入文件名 而不会意外删除扩展名 我