0

我有一个需要打开特定扩展名的文件的 JButton。简而言之,我定义了一个 JButton,向它添加一个动作侦听器,如果单击 JButton,它会触发一个 JFileChooser。我想添加一个文件过滤器,以便在 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 上。

我已经阅读了许多相关主题,但没有运气。

提前感谢您的评论。

4

5 回答 5

3

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

以下代码为用户的主目录弹出一个文件选择器,该目录只显示 .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());
}

尝试这个。从这里复制

于 2013-11-06T07:44:44.860 回答
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";
           }

         }
于 2013-11-06T07:48:47.447 回答
0

使用以下代码并使其更具可读性和简单性:

最终的 JFileChooser jfc = new JFileChooser(moviedir);

jfc.addChoosableFileFilter(new FileNameExtensionFilter("*.mpg", "mpg"));

于 2014-10-04T09:11:40.813 回答
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();
    }
}
于 2013-11-06T07:50:15.520 回答
0

简单的...

jfc.setFileFilter(new FileNameExtensionFilter("Movie files", "mpg"));
于 2013-11-06T08:04:34.190 回答