我用JFileChooser的保存文件对话框时,在文件名那个框中输入问号或者星号,对应的过滤filter的内容也会变成输入的文件名了?请问怎么解决啊?
比如,文件名输入aa*, 原本的filter是[*.html],点保存按钮之后,filter的内容就变成了[aa*]
我尝试重写了JFileChooser的approveSelect方法,结果还是无法实现
请高手帮忙指点一二

解决方案 »

  1.   

    附代码:
    import java.io.File;import javax.swing.JFileChooser;public class JValidateFileChooser extends JFileChooser { public void approveSelection() {
    File file = getSelectedFile();
    if (!validateFileName(file.getName())) {
    return;
    }
    super.approveSelection();
    } private boolean validateFileName(String name) {
    if (name.indexOf('\\') != -1 || name.indexOf('/') != -1 || name.indexOf(':') != -1 || name.indexOf('*') != -1
    || name.indexOf('?') != -1 || name.indexOf('"') != -1 || name.indexOf('<') != -1
    || name.indexOf('>') != -1 || name.indexOf('|') != -1) {
    return false;
    } else {
    return true;
    }
    }
    }
      

  2.   


    import java.awt.HeadlessException;import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    public class Test { public static void main(String[] args) {
    try {
    JFileChooser c = new LicenseFileChooser();
    int result = c.showSaveDialog(new JFrame());
    if(result == JFileChooser.APPROVE_OPTION){
    c.approveSelection();
    System.out.println(c.getSelectedFile());
    }
    } catch (HeadlessException e) {
    e.printStackTrace();
    }
    }

    static class LicenseFileChooser extends JFileChooser{
         String sysdefine = "~`!@#$%^&()[]{}?<>:,\"";
        
         //文件名是否包含特殊字符检测
         private boolean validity(String name){
         int len = sysdefine.toCharArray().length;
         for(int i=0;i<len;i++){
         if(name.indexOf(sysdefine.charAt(i))==-1){
         return true;
         }
         }
         return false;
         }
    public void approveSelection() {
    String inputFileName = getSelectedFile().getName();
    if (validity(inputFileName)) {
    JOptionPane.showMessageDialog(getParent(), "文件名不能包含下列任何字符之一:  \\ / : * ? \" < > |");
    return;
        }
    super.approveSelection();
    }
        }
    }
      

  3.   

    *号,在程序中通过 getSelectedFile().getName() 是获取不到的。
    需要修改JDK中的内容
      

  4.   

    似乎可以重写setFilter()方法来实现?
      

  5.   

    三楼的代码还是没有解决问题哦, 期待学习ing
      

  6.   

    我重写了setFilter方法,避免了一些问题,但是总感觉这么做很不专业