2013-10-10 4 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

Windows 7에서 JDK7을 사용하여 잘 작동합니다. 모든 디렉토리가 표시됩니다. 그런 다음 파일은 확장자로 필터링됩니다. – camickr

+0

나를 위해 동일합니다. JDK 7과 W7이 완벽하게 작동합니다. –

답변

1

시도 대신 fileChooser.addChoosableFileFilter(filter)fileChooser.setFileFilter(filter)를 사용 : 여기 내 코드입니다.

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에 따르면, 파일 필터 목록에 모든 파일 유형의 파일 필터를 추가하지 말 것을 말해야한다.