2013-10-10 2 views
7

Я использую JFileChooser для выбора файла, и я пытаюсь ограничить отображение, чтобы показывать только файлы jpg или jpeg. Я пробовал FileFilter и ChoosableFileFilter, и это не ограничивает выбор файла. Вот мой код:Фильтровать типы файлов с помощью JFileChooser

JFileChooser chooser = new JFileChooser(); 
FileFilter filter = new FileNameExtensionFilter("JPEG file", new String[] {"jpg", "jpeg"}); 
chooser.setFileFilter(filter); 
chooser.addChoosableFileFilter(filter); 
int returnVal = chooser.showOpenDialog(null); 
if(returnVal == JFileChooser.APPROVE_OPTION) { 
    debug.put("You chose to open this file: " + chooser.getSelectedFile().getAbsolutePath()); 
    File selectedFile = new File(chooser.getSelectedFile().getAbsolutePath()); 
... 
+2

Работает отлично для меня, используя JDK7 в Windows 7. Я вижу все каталоги. Затем файлы фильтруются по расширению. – camickr

+0

То же самое для меня. Он отлично работает, JDK 7 и W7 –

ответ

1

Try и использовать fileChooser.setFileFilter(filter) вместо fileChooser.addChoosableFileFilter(filter).

1

Попробуйте использовать fileChooser.setFileFilter(filter) после fileChooser.addChoosableFileFilter(filter), потому что вам нужно добавить filter в fileChooser, а затем установить его как значение по умолчанию.

Вот ссылка с хорошим примером: http://www.java2s.com/Code/Java/Swing-JFC/CustomizingaJFileChooser.htm

+0

Я считаю, что современная Java добавляет фильтр, если вы его установите, если его еще нет в списке. – shieldgenerator7

0

Вот пример кода!

private void btnChangeFileActionPerformed(java.awt.event.ActionEvent evt) {            
     final JFileChooser fc = new JFileChooser(); 
     fc.addChoosableFileFilter(new ArffFilter()); 
     int returnVal = fc.showOpenDialog(this); 
     ... 
} 

Тогда

class ArffFilter extends FileFilter { 

@Override 
public boolean accept(File file) { 
    if (file.isDirectory()) { 
     return true; 
    } 
    String fileName = file.getName(); 
    int i = fileName.lastIndexOf('.'); 

    if (i > 0 && i < fileName.length() - 1) { 
     if (fileName.substring(i + 1).toLowerCase().equals("arff")) { 
      return true; 
     } 
    } 

    return false; 
} 

    @Override 
    public String getDescription() { 
     return ".arff (Weka format)"; 
    } 
} 
5

Попробуйте это:

JFileChooser fileChooser = new JFileChooser(); 
JileChooser.setFileFilter(new FileFilter() { 

    public String getDescription() { 
     return "JPG Images (*.jpg)"; 
    } 

    public boolean accept(File f) { 
     if (f.isDirectory()) { 
      return true; 
     } else { 
      String filename = f.getName().toLowerCase(); 
      return filename.endsWith(".jpg") || filename.endsWith(".jpeg") ; 
     } 
    } 
}); 
1

ли вы имеете в виду «это не ограничивает выбор», как в «это позволяет возможность для любого типа файла»? Если да, попробуйте JFileChooser.setAcceptAllFileFilterUsed(boolean).

chooser.setAcceptAllFileFilterUsed(false); 

Согласно JFileChooser documentation, он должен сказать ему, чтобы не добавить фильтр файлов все-типы файлов в список фильтров файлов.

Смежные вопросы