문제

나는 JDialog 버튼으로/textfield 사용자가 파일을 선택합니다.여기에는 코드:

FileDialog chooser = new FileDialog(this, "Save As", FileDialog.SAVE );
String startDir = saveAsField.getText().substring( 0, saveAsField.getText().lastIndexOf('\\') );
chooser.setDirectory(startDir);
chooser.setVisible(true);
String fileName = chooser.getFile();

나의 문제는 대신 보고는 모든 파일 필터,을 제공하고자 사용자 정의 필터,예를 들어,에 대한 Word 문서 또는 무언가이다.나는 설정 사용자 지정 FilenameFilter 를 사용하여 setFilenameFilter()지만,그것은 작동하지 않았다.통지 않았다는 말에서 문서는 사용자 정의 필터에 작동하지 않는 윈도우(이에서 실행됩 Windows XP/Vista/7).여기에는 나의 구현 filter:

chooser.setFilenameFilter( new geFilter() );
public class geFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return name.endsWith( ".doc" ) || name.endsWith( ".docx" );
    }
}

내가 뭘 잘못하고 있는건가요?또한,내가 원하는 대한 설명에 나타나는 상자"와 같은 Microsoft Word(*.doc*.docx)"그러나 나는 방법을 확실하지 않습니다.

모든 도움에 감사드립니다.

도움이 되었습니까?

해결책

AWT 없이 정말로 원하는 방법으로 작성 Java GUI 앱 이러한 일입니다.태양에 있는 것 같이 버려진다.두 개의 가장 인기있는 옵션은 스윙과 SWT.그래서 나는 그들이 정말 못을 개발하는 Api 를 매우 광범위하게 추가하는 현대적인 기능입니다.(err,당신의 질문에 대답:없는 표시를 할 수 있는 AWT)

스윙 장점이 있는 그것이 진정으로 작성-한-실행,어디서나 볼 수 있다 정확히 어디에서나 동일하다.있는 보&느끼를 만들려고 스윙 보 원,일부는 더 나은 다른 사람보다(Mac 지 않는 끔찍한,Windows 은 좋아해서,사용자 인터페이스 그리고지 않).여전히,응용 프로그램을 원하는 경우에는 정말 보고 역할이 정확히 동일한 어디서나,스윙은 당신이습니다.게다가 그것을 실행 out-of-the-box 없이 추가 라이브러리입니다.성능 별로 어렵지 않습니다.

스윙의 JFileChooser 은 당신이 무엇을 원합니다.하위 클래스를 만들의 FileFilter 와 전화 setFileFilterJFileChooser.

SWT 소 write-once-실행은 어디에서나 반대 극단적이다.당신은 여전히 하나의 코드를 작성에 대하여,그러나 그것이 실제로 사용하는 기본 위젯에서 각 플랫폼 그래서 그것은 일반적으로처럼 보이는 기본 응용 프로그램(완전하지 않는 어디에나 있지만,여전히 인상적이다).그것은 빠르고 예쁜 신뢰할 수 있습니다.이클립스(및 다른 높은 소프트웨어 프로파일)사용하 SWT 그래서 그것은 예쁜 하는 데 도움이 됩니다.하지만 그것이 필요 없는 플랫폼-특정 항아리와 DLLs.

다른 팁

JDialog를 사용하고 있기 때문에 스윙 클래스입니다. JFILECHOOSER?

 JFileChooser fc = new JFileChooser("C:\\");
 fc.setFileFilter(new FileNameExtensionFilter("Microsoft Word (*.doc, *.docx)", "doc", "docx"));

filenameextensionFilter 당신이 원하는 것을 정확하게하는 멋진 Java 6 클래스입니다.

나는 또한 그렇게하려고 노력하고 있습니다. JFileChooser 대신 FileDialog를 사용하고 싶습니다.

여기서 답을 찾았습니다. http://www.rgagnon.com/javadetails/java-0247.html

그는 "WIN 플랫폼에서 setFilenameFilter 메소드는 작동하지 않습니다. 대신 SetFile 메소드를 사용하여 필터를 설정해야합니다."

지정된 링크에 소스 코드가 있습니다.

나는 테스트했고 그것은 작동한다 :

FileDialog fd = new FileDialog((Frame) null, "Save File", FileDialog.SAVE);
fd.setFile("*.txt");
fd.setVisible(true);

String file = fd.getFile();
System.out.println(file);
System.exit(0);

JNI와 함께 Native Windows Filedialog (cfiledialog)에 전화 할 수 있습니다. 필터는 cfiledialog를 쉽게 설정할 수 있습니다.

몇 달 전에 cfiledialog에 대한 간단한 래퍼 클래스를 썼습니다. 관심이 있다면 소스와 이진을 얻을 수 있습니다.

Google 코드의 xfiledialog 프로젝트

당신이 사용하는 경우 Javafx 2,, filechooser 수업은 JFileChooser/Filedialog 문제없이 필요한 것을 정확하게 수행합니다. 스윙 애플리케이션 내에 Javafx 2 구성 요소를 포함시킬 수도 있지만 Javafx 런타임.

예시:

    FileChooser fc = new FileChooser();
    FileChooser.ExtensionFilter filter;
    filter = new FileChooser.ExtensionFilter("Text files (*.txt)", "*.txt");
    fc.getExtensionFilters().add(filter);
    File f = fc.showOpenDialog(primaryStage);
    System.out.println(f);

그냥 사용하십시오 setFilenameFilter 방법의 방법 FileDialog 사례 fd:

            fd.setFilenameFilter(new FilenameFilter()
                            {
                                @Override
                                public boolean accept(File file, String s)
                                {
                                    // enter code to return TRUE or FALSE here
                                    return s.contains(".txt");
                                }
                            });
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top