问题是这样的,在JFileCHooser里面我需要这样的功能,默认的另存为文件文件名为test
然后有.txt .doc .xml这样的不同文件类型的过滤器,我希望在用户选择.txt这样的过滤器之后另存为文件名test变为test.txt,我找了很长时间没有找到实现方法,特此求教各为大侠。
然后有.txt .doc .xml这样的不同文件类型的过滤器,我希望在用户选择.txt这样的过滤器之后另存为文件名test变为test.txt,我找了很长时间没有找到实现方法,特此求教各为大侠。
demo在jdk\demo\jfc\FileChooserDemo,代码也在里面。
用的时候,开始会有选项,设置Filter Controls>Show JPG and GIF Filters, With File Extensions
您说的这个例子好像只是一般的FileFilter,只能做到选择不同的过滤器上面的文件显示不同,我希望的是选择了这个过滤器之后用户输入的test也能自动更改为test.jpg这样的样子。不知道您给的这个demo是不是我没看懂?
你的代码在获取用户选择的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);
}
我只是看word里面另存为的时候就是这么实现的效果,希望用JFileChooser实现这样的效果。比如我写的java程序希望用户另存为三种格式doc pdf txt格式,然后通过FileFilter进行文件后缀的控制,当用户选择txt格式说明用户希望另存为txt格式,那么希望在JFileChooser上能自动更改JFileChooser的文件名,就是希望这样的效果,跟word的doc另存为docx xml的效果一样
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);
我个人觉得这确实是解决问题的办法,只是我想要的效果必须要找到FileFilter与JFileChooser里面的各个SWING组件配合的具体机制,具体来说就是能够对文件过滤器切换的行为进行侦听,否则不可能实现。水平有限,我自己看JFileChooser的源码没有找到。您提供的这个例子有帮助,这个例子只是添加了逻辑控制,对于具体想要的功能没有什么借鉴意义。
我想你没有真正看懂我的问题,我对代码理解也没这么狭隘,我想要的是在选择过滤器的时候,在另存为一个新文件的时候,用户不需要输入后缀,只输入文件名,JFileChooser上面的文件名能自动更改
我知道你想要实现的功能,因为我做过一个这样的功能,保存文件的文件名其实是程序中加进去的,用户在输入框输入文件名并保持的时候,程序可以获得这个输入,然后并修改,然后保存文件,这不是JFileChooser的功能,而是自己实现的功能,也就是说你完全可以检测文件名是否以.key结尾,如果是则不加后缀,如果有则加上.key结尾,当然,你可以先获得用户选择了什么文件类型并保持,然后根据文件类型添加相应的后缀。
1.这个的确不是JFileChooser应自带的功能,但是我想实现,想问。
2.你说的程序检测我会做,没啥难度。我想要的就是能够让用户选择文件之后,文件名称——注意是在JFileChooser的文件名称改变,而不单纯是你程序保存文件名称改变。
3.没有找到如何实现的方法,不知道怎么拓展JFileChooser对UI的这个行为设置。最后还是想说,最重保存文件的逻辑没任何问题了,就是JFileChooser的UI我想实现下。