Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFileChooser在更改筛选器时附加扩展_Java_Swing_Jfilechooser - Fatal编程技术网

Java JFileChooser在更改筛选器时附加扩展

Java JFileChooser在更改筛选器时附加扩展,java,swing,jfilechooser,Java,Swing,Jfilechooser,我有过滤器 全部 html 文本 根据选择的过滤器,将扩展名附加到JFileChooser或不允许用户输入扩展名 不是在他们按下保存按钮之后,而是在窗口打开时 我正在查看addPropertyChangeListener,但在文件更改属性之外找不到任何内容 编辑:到目前为止,我可以添加过滤器,但我仍然不知道如何获取关联的过滤器 fc.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY,

我有过滤器

  • 全部
  • html
  • 文本
根据选择的过滤器,将扩展名附加到JFileChooser或不允许用户输入扩展名

不是在他们按下保存按钮之后,而是在窗口打开时

我正在查看addPropertyChangeListener,但在文件更改属性之外找不到任何内容

编辑:到目前为止,我可以添加过滤器,但我仍然不知道如何获取关联的过滤器

            fc.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, new PropertyChangeListener()
            {
                @Override
                public void propertyChange(PropertyChangeEvent evt)
                {
                    **MyFileFilter** filter = (**MyFileFilter**) evt.getNewValue();
                    String extension = filter.getExtensionByDescription(filter.getDescription());
                    //String extension = "ext"; // somehow here
                    fc.setSelectedFile(new File("." + extension));
                }
            });

解决方案

创建扩展FilerFilter的自定义类

    public String getExtensionByDescription(String description)
    {
        for (int i = 0 ; i < fileList.size(); i++)          
        {
            if (description.contains(fileList.get(i).getDescription()))
            {
                return "." + fileList.get(i).getExtension();
            }
        }
//      for (FileType obj : fileList)
//      {
//          if (description.contains(obj.getDescription()))
//              return "." +  obj.getExtension();
//      }
        return "";
    }
公共字符串getExtensionByDescription(字符串描述) { 对于(int i=0;i
另一个问题是,有人知道为什么注释掉的for循环不起作用吗?它返回了错误的扩展名,但在逻辑上与上面的循环相同:S

JFileChooser
似乎引发了meI的
fileFilterChanged
属性更改事件,但唯一可用的方法是getDescription,它对我来说不包含扩展名:(事件发生时,请询问
JFileChooser
以获取当前筛选器。)triggered@MadProgrammer我找到了答案。创建一个扩展FilterFilter的自定义类。使用使用描述获取扩展的方法getExtension。完成后我将发布帖子。谢谢!@MadProgrammer我添加了我的工作解决方案,很快stion.知道为什么注释掉的for循环不起作用吗?我查看了它们,它们在功能上是相同的,但是注释掉的for循环返回了错误的值:(