40

I want to set file filters in a JavaFX FileChooser but I could not find a way to do it.

My code:

  FileChooser fc = new FileChooser();
  fc.setTitle("My File Chooser");
  File f = fc.showOpenDialog(primaryStage);
  System.out.println(f);
Winter
  • 3,894
  • 7
  • 24
  • 56
ceklock
  • 6,143
  • 10
  • 56
  • 78
  • 2
    I don't have experience, but it sounds like it's similar to code in this thread: https://forums.oracle.com/forums/thread.jspa?messageID=10333202 – Charlie Nov 29 '12 at 21:01

3 Answers3

80

You could do:

FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
chooser.getExtensionFilters().add(extFilter);

Here is a simple example:

public class ExtensionFilterExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(final Stage primaryStage) {
        primaryStage.setTitle("Extension Filter Example");

        final Label fileLabel = new Label();

        Button btn = new Button("Open FileChooser");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                FileChooser fileChooser = new FileChooser();

                // Set extension filter
                FileChooser.ExtensionFilter extFilter = 
                        new FileChooser.ExtensionFilter("TEXT files (*.txt)", "*.txt");
                fileChooser.getExtensionFilters().add(extFilter);

                // Show open file dialog
                File file = fileChooser.showOpenDialog(primaryStage);
                if (file != null) {
                    fileLabel.setText(file.getPath());
                }
            }
        });

        VBox vBox = new VBox(30);
        vBox.getChildren().addAll(fileLabel, btn);
        vBox.setAlignment(Pos.BASELINE_CENTER);

        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
Reimeus
  • 158,255
  • 15
  • 216
  • 276
  • 2
    Thanks, it really works. I saw the getExtensionFilters() in the documentation, but I was expecting something like addExtensionFilter() or setExtensionFilters(). – ceklock Nov 30 '12 at 00:35
  • 1
    Can FileChooser be reused here or does it have to be created for each event occurrence? – ed22 Mar 02 '18 at 12:06
20

Update for JavaFX plus multiple extensions filter:

FileChooser fc = new FileChooser();

FileChooser.ExtensionFilter fileExtensions = 
  new FileChooser.ExtensionFilter(
    "Web pages", "*.tpl", "*.html", "*.htm");

fc.getExtensionFilters().add(fileExtensions);
Zon
  • 18,610
  • 7
  • 91
  • 99
-2

This is How you can do it.

FileChooser fc=new FileChooser();
FileChooser.ExtensionFilter fileExtensions =new FileChooser.ExtensionFilter("music files","*.mp3", "*.mp4");
fc.getExtensionFilters().add(fileExtensions);
List<File> selectedFiles=fc.showOpenMultipleDialog(null);       
if(selectedFiles!=null){
     for(int i=0;i<selectedFiles.size();i++){
           System.out.println(selectedFiles.get(i).toString());
     }
}
Vivek Tiwari
  • 15
  • 1
  • 3