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

风尘中国 2011-07-21 11:52:50
问题是这样的,在JFileCHooser里面我需要这样的功能,默认的另存为文件文件名为test
然后有.txt .doc .xml这样的不同文件类型的过滤器,我希望在用户选择.txt这样的过滤器之后另存为文件名test变为test.txt,我找了很长时间没有找到实现方法,特此求教各为大侠。
...全文
574 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 重写里面的方法。

62,615

社区成员

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

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