2013-12-05 2 views
11

Я хочу ограничить JFileChooser, чтобы выбрать только mp3-файлы. Но, следующий код позволяет все типы файлов:FileFilter для JFileChooser

FileFilter filter = new FileNameExtensionFilter("MP3 File","mp3"); 
fileChooser.addChoosableFileFilter(filter); 
fileChooser.showOpenDialog(frame); 
File file = fileChooser.getSelectedFile(); 
+0

Не пробовал, но в соответствии с [Javadoc для конструктора] (http://docs.oracle.com/javase/7/docs/api/javax/swing/filechooser/FileNameExtensionFilter.html#FileNameExtensionFilter%28java. lang.String,% 20java.lang.String ...% 29), первый параметр - это просто имя фильтра; принятые расширения начинаются с номера параметра. два. –

+0

Я тоже это пробовал, но это не работает! – Tanay

ответ

13

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

+0

Спасибо, все получилось! – Tanay

7

Try:

FileFilter filter = new FileNameExtensionFilter("My mp3 description", "mp3"); 

Первый аргумент просто описание FileNameExtensionFilter - и так как второй аргумент Var арг, вы можете оставить его как вы это делали, эффективно означает отсутствие фильтра.

+0

Я тоже пробовал, но это не работает! – Tanay

2

Этот фрагмент кода может помочь вам:

JFileChooser jfc=new JFileChooser(System.getProperty("user.dir",".")); 

FileFilter ff = new FileFilter(){ 
    public boolean accept(File f){ 
     if(f.isDirectory()) return true; 
     else if(f.getName().endsWith(".mp3")) return true; 
      else return false; 
    } 
    public String getDescription(){ 
     return "MP3 files"; 
    } 
}; 

jfc.removeChoosableFileFilter(jfc.getAcceptAllFileFilter()); 
jfc.setFileFilter(ff); 

if(jfc.showDialog(frame,"openG")==JFileChooser.APPROVE_OPTION){ 
     String fileName = jfc.getSelectedFile().getPath(); 
} 
+1

Эта функциональность уже встроена в класс 'FileNameExtensonFilter' ... – Sinkingpoint

6

Если вы хотите только mp3 файлы:

import javax.swing.JFileChooser; 
import javax.swing.filechooser.FileNameExtensionFilter; 

public class SalutonFrame { 

    public static void main(String[] args) { 
     JFileChooser fileChooser = new JFileChooser(); 
     fileChooser.setAcceptAllFileFilterUsed(false); 
     FileNameExtensionFilter filter = new FileNameExtensionFilter("MPEG3 songs", "mp3"); 
     fileChooser.addChoosableFileFilter(filter); 
     fileChooser.showOpenDialog(null); 

    } 
} 
+0

К сожалению, это не работает! – Tanay

+0

Я обновил свой код с полным примером. Woks здесь ... – Samy

4

fileChooser.addChoosableFileFilter(filter) добавит пользовательский фильтр файлов в список фильтров, выбираемых пользователем. По умолчанию список фильтров, выбираемых пользователем, включает фильтр Accept All, который позволяет пользователю видеть все не скрытые файлы.

Вам нужно будет ссылаться: fileFilter.setAcceptAllFileFilterUsed(false)

setAcceptAllFileFilterUsed(boolean) определяет, используется ли AcceptAll FileFilter как доступный выбор в списке Choosable фильтра. Если false, фильтр файлов AcceptAll удаляется из списка доступных фильтров файлов. Если true, фильтр файлов AcceptAll станет активно используемым файловым фильтром.

+0

Спасибо! Просто замечание: setAcceptAllFileFilterUsed() принадлежит классу JFileChooser;) – Gordak

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