【问题标题】:File Filter does not appear on JFileChooser in Java swingJava swing 中的 JFileChooser 上没有出现文件过滤器
【发布时间】:2013-11-06 07:41:25
【问题描述】:

我有一个需要打开特定扩展名的文件的 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 上。

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

提前感谢 cmets。

【问题讨论】:

    标签: java swing jfilechooser filefilter


    【解决方案1】:

    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());
    }
    

    试试这个。 Copied from here

    【讨论】:

    • 我发现错误出在哪里:我有一行 `int returnVal = chooser.showOpenDialog(null);'在文件过滤器之前。当然没有应用文件过滤器。今日道德:showOpenDialog 总是在 (new JFileChooser()).setFileFilter(filter) 之后。尽管您没有明确指出这一点,但您还是让我找到了答案。谢谢。
    【解决方案2】:

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

    像这样调用你的文件选择器:-

    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";
               }
    
             }
    

    【讨论】:

      【解决方案3】:

      简单...

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

      【讨论】:

      • 谢谢,但我已经尝试过了。也没有工作(对不起,忘了提)。
      【解决方案4】:

      只提供一个例子供参考。

      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();
          }
      }
      

      【讨论】:

        【解决方案5】:

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

        final JFileChooser jfc = new JFileChooser(moviedir);

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

        【讨论】:

          猜你喜欢
          • 2021-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多