Java swing中的文件过滤器没有出现在JFileChooser上

时间:2013-11-06 07:41:26

标签: java swing jfilechooser filefilter

我有一个需要打开特定扩展名的文件的JButton。简而言之,如果单击JButton,我会定义一个JButton向其添加一个触发JFileChooser的actionlistener。我想添加一个文件过滤器,以便只在JFileChooser上显示扩展名.mpg的文件。

编译显示没有错误,但是在摇摆中,JFileChooser没有显示可用文件的过滤(组合框中没有“电影文件”选项 - 只是'所有文件')。用两个词来说,似乎addChoosableFileFilter没有任何效果。

我的代码是:

final JFileChooser jfc = new JFileChooser(moviedir);
//add File Filter
jfc.addChoosableFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "Movie files (*.mpg)";
}
@Override
public boolean accept(File f) {
if (f.isDirectory()) {return true;} 
else {return f.getName().toLowerCase().endsWith(".mpg");}
 }
});

我也尝试了

的替代方案
jfc.addChoosableFileFilter(new FileNameExtensionFilter("Movie files", "mpg"));

同样的命运。以上所有内容都在我挥杆的JFrame的JPanel上。

我读过很多相关主题,但没有运气。

提前感谢您的评论。

5 个答案:

答案 0 :(得分:3)

  

JFileChooser为用户提供了一种简单的机制来选择   文件。有关使用JFileChooser的信息,请参阅如何使用文件   选择器,The Java Tutorial中的一个部分。

     

以下代码会弹出用户主目录的文件选择器   仅查看.jpg和.gif图像的目录:

JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
   System.out.println("You chose to open this file: " +
        chooser.getSelectedFile().getName());
}

试试这个。 Copied from here

答案 1 :(得分:1)

试试这段代码。它对我有用

像这样调用你的文件回应者: -

JFileChooser fc = new JFileChooser("C:/");
            fc.setFileFilter(new JPEGImageFileFilter());

并使类JPEGImageFileFilter像这样: -

 class JPEGImageFileFilter extends FileFilter implements java.io.FileFilter
         {
         public boolean accept(File f)
           {
           if (f.getName().toLowerCase().endsWith(".jpeg")) return true;
           if (f.getName().toLowerCase().endsWith(".jpg")) return true;
           if (f.getName().toLowerCase().endsWith(".avi")) return true;
           if (f.getName().toLowerCase().endsWith(".mpeg")) return true;
           return false;
           }
         public String getDescription()
           {
           return "JPEG files";
           }

         }

答案 2 :(得分:0)

举一个例子供参考。

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

import java.text.*;

public class TextReaderExapmle extends JFrame {

    private static final long serialVersionUID = -8816650884305666302L;
    private static final String FRAME_TITLE = "File Chosser demo";
    private static final Dimension FRAME_SIZE = new Dimension(400, 350);
    private JButton fileChoosingButton;
    private JTextArea textArea;
    private JFileChooser fileChooser;

    public TextReaderExapmle() {
        super(FRAME_TITLE);
        init();
        doLay();
        attachListeners();
    }

    private void init() {
        fileChoosingButton = new JButton(new FileChooseAction());
        textArea = new JTextArea();

        fileChooser = new JFileChooser(System.getProperty("user.dir"));
        fileChooser.setFileFilter(new TextFileFilter());
        fileChooser.setMultiSelectionEnabled(false);
    }

    private void doLay() {
        Container container = getContentPane();
        container.add(fileChoosingButton, BorderLayout.NORTH);
        container.add(new JScrollPane(textArea), BorderLayout.CENTER);

        setSize(FRAME_SIZE);
        setVisible(true);
    }

    private void attachListeners() {
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(1);
            }
        });
    }

    /**
     * read text from the selected text file and convert text to string
     * 
     * @param reader
     * @return converted string
     */
    private static String readTextFromFile(final FileReader reader) {
        if (reader == null)
            return "";
        StringBuffer buf = new StringBuffer();

        final int CACHE_SIZE = 1024;
        final char[] cache = new char[CACHE_SIZE];
        try {
            int b;
            while ((b = reader.read(cache)) != -1) {
                if (b < CACHE_SIZE)
                    buf.append(cache, 0, b);
                else
                    buf.append(cache);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buf.toString();
    }

    /**
     * open file chooser action
     */
    private class FileChooseAction extends AbstractAction {
        static private final String ACTION_LABEL = "Open File...";

        public FileChooseAction() {
            super(ACTION_LABEL);
        }

        public void actionPerformed(ActionEvent e) {

            int returnVal = fileChooser.showOpenDialog(fileChoosingButton);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                try {
                    FileReader reader = new FileReader(
                            fileChooser.getSelectedFile());
                    textArea.setText(readTextFromFile(reader));
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }

    /* file filter */
    private class TextFileFilter extends FileFilter {
        private final java.util.List<String> fileNameExtensionList = new ArrayList<String>();

        public TextFileFilter() {
            fileNameExtensionList.add("txt");
            fileNameExtensionList.add("java");
            fileNameExtensionList.add("log");
            fileNameExtensionList.add("xml");
            fileNameExtensionList.add("htm");
            fileNameExtensionList.add("html");
            fileNameExtensionList.add("html");
            fileNameExtensionList.add("properties");
            fileNameExtensionList.add("svg");
        }

        public boolean accept(File f) {
            if (f.isDirectory())
                return true;
            final String fileName = f.getName();
            int lastIndexOfDot = fileName.lastIndexOf('.');

            if (lastIndexOfDot == -1)
                return false;

            int fileNameLength = fileName.length();
            final String extension = fileName.substring(lastIndexOfDot + 1,
                    fileNameLength);

            return fileNameExtensionList.contains(extension);
        }

        public String getDescription() {
            StringBuffer buf = new StringBuffer("Text File(");
            for (String fn : fileNameExtensionList)
                buf.append(MessageFormat.format("*.{0};", fn));
            return buf.append(')').toString();
        }
    }

    public static void main(String[] args) {
        new TextReaderExapmle();
    }
}

答案 3 :(得分:0)

简单......

jfc.setFileFilter(new FileNameExtensionFilter("Movie files", "mpg"));

答案 4 :(得分:0)

使用以下代码,使其更易读:

final JFileChooser jfc = new JFileChooser(moviedir);

jfc.addChoosableFileFilter(new FileNameExtensionFilter(&#34; * .mpg&#34;,&#34; mpg&#34;));