JFileChooser如何能够根据filter根据不同文件后缀自动更改文件名

风尘中国 2011-07-21 11:52:50
问题是这样的,在JFileCHooser里面我需要这样的功能,默认的另存为文件文件名为test
然后有.txt .doc .xml这样的不同文件类型的过滤器,我希望在用户选择.txt这样的过滤器之后另存为文件名test变为test.txt,我找了很长时间没有找到实现方法,特此求教各为大侠。
...全文
604 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bnu_gaoyong 的回复:]

引用 8 楼 spiniper 的回复:
楼主,你对代码的理解过于狭隘,我提供的只是JFileChooser对于文件过滤的一种方式以及运用,对于你的需求,选择文件过滤器,然后保存时也使用与过滤器相同的后缀,这些是需要你自己去实现的,文件的路径,文件的名称都要你自己去实现


我想你没有真正看懂我的问题,我对代码理解也没这么狭隘,我想要的是在选择过滤器的时候,在另存为一个新文件的时候,用户……
[/Quote]

我知道你想要实现的功能,因为我做过一个这样的功能,保存文件的文件名其实是程序中加进去的,用户在输入框输入文件名并保持的时候,程序可以获得这个输入,然后并修改,然后保存文件,这不是JFileChooser的功能,而是自己实现的功能,也就是说你完全可以检测文件名是否以.key结尾,如果是则不加后缀,如果有则加上.key结尾,当然,你可以先获得用户选择了什么文件类型并保持,然后根据文件类型添加相应的后缀。
树成 2011-07-28
  • 打赏
  • 举报
回复
有难度才有做的必要么,没难度的事情,做了干啥?
风尘中国 2011-07-28
  • 打赏
  • 举报
回复
这个难度很大,对我来说
[Quote=引用 12 楼 spiniper 的回复:]
如果要更改UI的行为,就要向我那样继承JFileChooser类,实现自己的类,然后覆盖对应的方法来更改JFileChooser的行为,这种方式能更改掉任何行为,但是你需要找到那个行为的方法,关于这个问题,你可以去查jdk document JFileChooser以及其父类的帮助,使用继承,还可以改变JFileChooser上面的界面样式以及组件和展示方式,当然,这些都要你自己去做了。
[/Quote]
树成 2011-07-28
  • 打赏
  • 举报
回复
如果要更改UI的行为,就要向我那样继承JFileChooser类,实现自己的类,然后覆盖对应的方法来更改JFileChooser的行为,这种方式能更改掉任何行为,但是你需要找到那个行为的方法,关于这个问题,你可以去查jdk document JFileChooser以及其父类的帮助,使用继承,还可以改变JFileChooser上面的界面样式以及组件和展示方式,当然,这些都要你自己去做了。
bnu_gaoyong 2011-07-28
  • 打赏
  • 举报
回复
感谢您的回答:
1.这个的确不是JFileChooser应自带的功能,但是我想实现,想问。
2.你说的程序检测我会做,没啥难度。我想要的就是能够让用户选择文件之后,文件名称——注意是在JFileChooser的文件名称改变,而不单纯是你程序保存文件名称改变。
3.没有找到如何实现的方法,不知道怎么拓展JFileChooser对UI的这个行为设置。

最后还是想说,最重保存文件的逻辑没任何问题了,就是JFileChooser的UI我想实现下。

[Quote=引用 10 楼 spiniper 的回复:]

引用 9 楼 bnu_gaoyong 的回复:

引用 8 楼 spiniper 的回复:
楼主,你对代码的理解过于狭隘,我提供的只是JFileChooser对于文件过滤的一种方式以及运用,对于你的需求,选择文件过滤器,然后保存时也使用与过滤器相同的后缀,这些是需要你自己去实现的,文件的路径,文件的名称都要你自己去实现


我想你没有真正看懂我的问题,我对代码理解也没这么狭隘,我想要……
[/Quote]
bnu_gaoyong 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 spiniper 的回复:]
楼主,你对代码的理解过于狭隘,我提供的只是JFileChooser对于文件过滤的一种方式以及运用,对于你的需求,选择文件过滤器,然后保存时也使用与过滤器相同的后缀,这些是需要你自己去实现的,文件的路径,文件的名称都要你自己去实现
[/Quote]

我想你没有真正看懂我的问题,我对代码理解也没这么狭隘,我想要的是在选择过滤器的时候,在另存为一个新文件的时候,用户不需要输入后缀,只输入文件名,JFileChooser上面的文件名能自动更改
shine333 2011-07-22
  • 打赏
  • 举报
回复
这个不是你JFileChooser(简作jfc)该做的。
你的代码在获取用户选择的File后,如果判断出File的扩展名不是.txt,那么就自动改文件

int result = jfc.showSaveDialog(yourParentSwingComponent);
if (result == JFileChooser.APPROVE_OPTION) {
File file = jfc.getSelectedFile();
if (!file.getFileName().toLowerCase().endsWith(".txt")) {
file = new File(file.getParent(), file.getName() + ".txt");
}
saveDocInFile(file);
}
风尘中国 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shine333 的回复:]
可以使用javax.swing.filechooser.FileNameExtensionFilter
demo在jdk\demo\jfc\FileChooserDemo,代码也在里面。
用的时候,开始会有选项,设置Filter Controls>Show JPG and GIF Filters, With File Extensions
[/Quote]

您说的这个例子好像只是一般的FileFilter,只能做到选择不同的过滤器上面的文件显示不同,我希望的是选择了这个过滤器之后用户输入的test也能自动更改为test.jpg这样的样子。

不知道您给的这个demo是不是我没看懂?
shine333 2011-07-22
  • 打赏
  • 举报
回复
可以使用javax.swing.filechooser.FileNameExtensionFilter
demo在jdk\demo\jfc\FileChooserDemo,代码也在里面。
用的时候,开始会有选项,设置Filter Controls>Show JPG and GIF Filters, With File Extensions
树成 2011-07-22
  • 打赏
  • 举报
回复
楼主,你对代码的理解过于狭隘,我提供的只是JFileChooser对于文件过滤的一种方式以及运用,对于你的需求,选择文件过滤器,然后保存时也使用与过滤器相同的后缀,这些是需要你自己去实现的,文件的路径,文件的名称都要你自己去实现
bnu_gaoyong 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 spiniper 的回复:]
我觉得,你应该考虑一下我的建议,自己复写JfileChooser

既然你不知道写,给你个例子

Java code

package com.ekingstar.cipherapp;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import j……
[/Quote]

我个人觉得这确实是解决问题的办法,只是我想要的效果必须要找到FileFilter与JFileChooser里面的各个SWING组件配合的具体机制,具体来说就是能够对文件过滤器切换的行为进行侦听,否则不可能实现。

水平有限,我自己看JFileChooser的源码没有找到。您提供的这个例子有帮助,这个例子只是添加了逻辑控制,对于具体想要的功能没有什么借鉴意义。
树成 2011-07-22
  • 打赏
  • 举报
回复
我觉得,你应该考虑一下我的建议,自己复写JfileChooser

既然你不知道写,给你个例子

package com.ekingstar.cipherapp;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class FileCheckChooser extends JFileChooser {
private static final long serialVersionUID = -7281758066216188169L;

public void approveSelection() {
File file=this.getSelectedFile();
Pattern pattern=Pattern.compile("[:,\",<,>,\\|]");
Matcher matcher=pattern.matcher(file.getName());
if(matcher.find()){
JOptionPane.showMessageDialog(this, "不能输入以下字符:\r\n \" : < > |","错误",JOptionPane.ERROR_MESSAGE);
return ;
}
String modle=this.getApproveButtonText();
if("载入".equals(modle)){
if(!file.exists()){
JOptionPane.showMessageDialog(this, "文件不存在","错误",JOptionPane.ERROR_MESSAGE);
return ;
}
Pattern pattern1=Pattern.compile("^.*\\.key$");
Matcher m= pattern1.matcher(file.getName());
boolean check= m.matches();
if(!check){
JOptionPane.showMessageDialog(this, "请选择密钥文件","错误",JOptionPane.ERROR_MESSAGE);
return ;
}
}else if("生成".equals(modle)){
if(file.exists()){
int select=JOptionPane.showConfirmDialog(this, "文件已经存在,是否需要覆盖?","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(select==JOptionPane.NO_OPTION){
return;
}
}
}
super.approveSelection();
}
}




this.jfc=new FileCheckChooser();
this.jfc.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter fnef=new FileNameExtensionFilter("Key File","key");
jfc.setFileFilter(fnef);
风尘中国 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shine333 的回复:]
这个不是你JFileChooser(简作jfc)该做的。
你的代码在获取用户选择的File后,如果判断出File的扩展名不是.txt,那么就自动改文件


Java code
int result = jfc.showSaveDialog(yourParentSwingComponent);
if (result == JFileChooser.APPROVE_OPTION) {
……
[/Quote]

我只是看word里面另存为的时候就是这么实现的效果,希望用JFileChooser实现这样的效果。比如我写的java程序希望用户另存为三种格式doc pdf txt格式,然后通过FileFilter进行文件后缀的控制,当用户选择txt格式说明用户希望另存为txt格式,那么希望在JFileChooser上能自动更改JFileChooser的文件名,就是希望这样的效果,跟word的doc另存为docx xml的效果一样
树成 2011-07-21
  • 打赏
  • 举报
回复
自己继承JfileChooser 重写里面的方法。
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 在信息技术领域中,开发一个模仿微信客服交流平台的界面是一项普遍的需求,尤其是在构建企业级沟通工具时。这个名为"仿微信客服交流界面(具备聊天信息本地数据库存储功能)"的项目,致力于为用户创造一个类似于微信的互动体验,并且已经完成了聊天信息在本地数据库中的保存功能,以此保障信息的安全性和可恢复性。另外,项目还包含了网络传输的代码,旨在帮助开发者更好地理解和将此功能整合进自己的应用程序中。 现在让我们深入探究聊天界面的构建过程。微信客服交流界面通常由以下几个核心组件构成:用户个人照片、昵称展示、消息展示气泡、时间标记、输入区域以及发送控制键。这些组件需要经过细致的排布,以确保界面既清晰又便于使用。在用户界面设计方面,一般会采用 Material Design 或者 iOS 的 Human Interface Guidelines 来设计符合平台标准的界面。源代码文件 ChatUIDemo 可能包含了这一界面实现的代码,开发者可以通过查看和调整这个文件来个性化自己的聊天界面。 聊天信息在本地数据库中的存储是一项核心功能。在该项目中,或许选用了SQLite作为轻量级数据库,因为它易于集成,支持事务处理,适合存储结构化的数据,例如用户标识符、接收者标识符、消息内容、发送时刻等。通过运用SQL指令,能够执行数据的增加、删除、修改和查询操作,从而确保聊天记录的完整性和一致性。开发者可能需要关注如何将新接收到的消息添加到数据库中,以及如何从数据库中获取历史记录并在界面上进行展示。 在网络传输方面,可能通过HTTP或HTTPS协议来实现,并且使用了诸如AFNetworking(iOS)或O...
内容概要:本文围绕虚拟同步发电机(VSG)接入弱电网的序阻抗建模与稳定性分析开展研究,基于Matlab/Simulink平台搭建详细的仿真模型,系统复现并验证相关理论方法。研究重点包括VSG在弱电网条件下的正负序阻抗特性建模、基于小信号分析的扫频法建模流程、系统阻抗交互特性及潜在的失稳机理分析。通过具体仿真案例,深入探讨了VSG控制参数对系统稳定性的影响,旨在为新能源并网系统的稳定运行提供理论依据与技术支撑。该内容属于电力电子与电力系统稳定性交叉领域的前沿课题,具有重要的学术价值与工程应用前景。; 适合人群:具备电力系统分析、电力电子变换器控制等基础知识,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制、电力系统稳定性研究的研究生、科研人员及工程师;有志于复现高水平期刊论文中阻抗建模与稳定性分析方法的技术开发者。; 使用场景及目标:① 掌握虚拟同步发电机在弱电网中的序阻抗建模理论与实现方法;② 理解并实践基于扫频法的小信号稳定性分析全过程;③ 应用于构网型变流器、虚拟同步机等先进并网技术的稳定性研究与仿真验证。; 阅读建议:建议结合所提供的Simulink仿真模型与技术资料,按照文档结构循序渐进地学习,重点关注建模原理、仿真参数设置与结果分析过程,同时参考链接中的完整资源进行代码调试与深入探究。
内容概要:本文围绕电动汽车参与电力系统运行备用的能力评估开展研究,利用Matlab代码实现对电动汽车群体作为灵活性资源参与电网辅助服务的建模与仿真分析。研究重点包括基于多面体聚合与闵可夫斯基和的电动汽车可调能力(功率容量)量化方法、其在多时间尺度调度中的响应特性建模、运行备用潜力的聚合评估,以及结合智能优化算法的仿真验证,旨在系统性分析电动汽车在提供运行备用方面的技术可行性、调控潜力与系统价值。; 适合人群:具备电力系统运行与控制、智能优化算法基础,以及Matlab/Simulink编程能力的高校研究生、科研机构研究人员及从事新能源并网、需求响应、智能电网相关工作的工程技术人员。; 使用场景及目标:①掌握电动汽车集群可调能力的数学建模与聚合评估方法;②研究电动汽车参与电力系统多时间尺度协调调度的实现机制;③为高比例可再生能源电力系统的灵活性提升与运行备用资源配置提供技术参考与仿真工具支持。; 阅读建议:建议读者结合文中提供的Matlab代码深入理解电动汽车聚合建模与备用能力评估的具体实现流程,重点关注多面体建模、闵可夫斯基和运算及优化求解部分,并可延伸学习同平台关于V2G、微电网调度等相关资源以构建完整的知识体系。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧