betacode

Руководство JavaFX FileChooser и DirectoryChooser

  1. JavaFX FileChooser, DirectoryChooser
  2. Пример с FileChooser
  3. Пример DirectoryChooser
  4. Конфигурация для FileChooser, DirectoryChooser
  5. Настроить фильтр FileChooser
  6. Пример Save File

1. JavaFX FileChooser, DirectoryChooser

FileChooser позволяет пользвателю перемещать систему файлов чтоы выбрать один или более файлов. Индентичный компонент это DirectoryChooser позволяет пользователю выбирать папку.
Внизу является изображение FileChooser/DirectoryChooser когда он запущен на разных операционных системах.
Mac OS
Windows
Linux

2. Пример с FileChooser

Пример ниже, когда пользователь нажимает на кнопку, появится FileChooser чтобы пользоватедь выбирал файлы и открывал их.
OpenFileChooserDemo.java
package org.o7planning.javafx.filechooser;

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class OpenFileChooserDemo extends Application {

    private Desktop desktop = Desktop.getDesktop();

    @Override
    public void start(Stage primaryStage) throws Exception {

        final FileChooser fileChooser = new FileChooser();

        TextArea textArea = new TextArea();
        textArea.setMinHeight(70);

        Button button1 = new Button("Select One File and Open");

        Button buttonM = new Button("Select Multi Files");

        button1.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                textArea.clear();
                File file = fileChooser.showOpenDialog(primaryStage);
                if (file != null) {
                    openFile(file);
                    List<File> files = Arrays.asList(file);
                    printLog(textArea, files);
                }
            }
        });

        buttonM.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                textArea.clear();
                List<File> files = fileChooser.showOpenMultipleDialog(primaryStage);

                printLog(textArea, files);
            }
        });

        VBox root = new VBox();
        root.setPadding(new Insets(10));
        root.setSpacing(5);

        root.getChildren().addAll(textArea, button1, buttonM);

        Scene scene = new Scene(root, 400, 200);

        primaryStage.setTitle("JavaFX FileChooser (o7planning.org)");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void printLog(TextArea textArea, List<File> files) {
        if (files == null || files.isEmpty()) {
            return;
        }
        for (File file : files) {
            textArea.appendText(file.getAbsolutePath() + "\n");
        }
    }

    private void openFile(File file) {
        try {
            this.desktop.open(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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

}

3. Пример DirectoryChooser

Например, используйте DirectoryChooser чтобы выбрать папку:
DirectoryChooserDemo.java
package org.o7planning.javafx.filechooser;

import java.io.File;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;

public class DirectoryChooserDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        final DirectoryChooser directoryChooser = new DirectoryChooser();
        configuringDirectoryChooser(directoryChooser);

        TextArea textArea = new TextArea();
        textArea.setMinHeight(70);

        Button button = new Button("Open DirectoryChooser and select a directory");

        button.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                File dir = directoryChooser.showDialog(primaryStage);
                if (dir != null) {
                    textArea.setText(dir.getAbsolutePath());
                } else {
                    textArea.setText(null);
                }
            }
        });

        VBox root = new VBox();
        root.setPadding(new Insets(10));
        root.setSpacing(5);

        root.getChildren().addAll(textArea, button);

        Scene scene = new Scene(root, 400, 200);

        primaryStage.setTitle("JavaFX DirectoryChooser (o7planning.org)");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void configuringDirectoryChooser(DirectoryChooser directoryChooser) {
        // Set title for DirectoryChooser
        directoryChooser.setTitle("Select Some Directories");

        // Set Initial Directory
        directoryChooser.setInitialDirectory(new File(System.getProperty("user.home")));
    }

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

}

4. Конфигурация для FileChooser, DirectoryChooser

Вы можете назвать FileChooser/DirectoryChooser и папка появится по умочанию когда пользователь открывает FileChooser/DirectoryChooser.
// Set title for FileChooser
fileChooser.setTitle("Select Some Files");

// Set Initial Directory
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
ConfiguringFileChooserDemo.java
package org.o7planning.javafx.filechooser;

import java.io.File;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class ConfiguringFileChooserDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        final FileChooser fileChooser = new FileChooser();
        configuringFileChooser(fileChooser);

        TextArea textArea = new TextArea();
        textArea.setMinHeight(70);

        Button button = new Button("Open File Chooser and select some files");

        button.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                fileChooser.showOpenDialog(primaryStage);
            }
        });

        VBox root = new VBox();
        root.setPadding(new Insets(10));
        root.setSpacing(5);

        root.getChildren().addAll(button);

        Scene scene = new Scene(root, 400, 200);

        primaryStage.setTitle("JavaFX FileChooser (o7planning.org)");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void configuringFileChooser(FileChooser fileChooser) {
        // Set title for FileChooser
        fileChooser.setTitle("Select Some Files");

        // Set Initial Directory
        fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
    }

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

}

5. Настроить фильтр FileChooser

Далее, вы можете конфигурировать FileChooser дополнительно в фильтры чтобы решить какие виды файлов будут отображаться на FileChooser. Например создать 3 фильтра, фильтр ALL- отображает все виды файлов, фильтр PNG отображает картины png, и фильтр JPG только отображает картины jpg.
// Add Extension Filters

fileChooser.getExtensionFilters().addAll(//
       new FileChooser.ExtensionFilter("All Files", "*.*"), 
       new FileChooser.ExtensionFilter("JPG", "*.jpg"), 
       new FileChooser.ExtensionFilter("PNG", "*.png"));
The filters:
Фильтр All - Отображает все виды файлов и папок.
Фильтр PNG отображает только картины png или папки.
Смотреть полный пример:
FilterFileChooserDemo.java
package org.o7planning.javafx.filechooser;

import java.io.File;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class FilterFileChooserDemo extends Application {

  @Override
  public void start(Stage primaryStage) throws Exception {

      final FileChooser fileChooser = new FileChooser();
      configuringFileChooser(fileChooser);

      TextArea textArea = new TextArea();
      textArea.setMinHeight(70);

      Button button = new Button("Select some Pictures");

      button.setOnAction(new EventHandler<ActionEvent>() {

          @Override
          public void handle(ActionEvent event) {
              fileChooser.showOpenDialog(primaryStage);
          }
      });

      VBox root = new VBox();
      root.setPadding(new Insets(10));
      root.setSpacing(5);

      root.getChildren().addAll(button);

      Scene scene = new Scene(root, 400, 200);

      primaryStage.setTitle("JavaFX FileChooser (o7planning.org)");
      primaryStage.setScene(scene);
      primaryStage.show();
  }

  private void configuringFileChooser(FileChooser fileChooser) {
      // Set title for FileChooser
      fileChooser.setTitle("Select Pictures");

      // Set Initial Directory
      fileChooser.setInitialDirectory(new File("C:/Users/tran/Pictures"));

      // Add Extension Filters
      fileChooser.getExtensionFilters().addAll(//
              new FileChooser.ExtensionFilter("All Files", "*.*"), //
              new FileChooser.ExtensionFilter("JPG", "*.jpg"), //
              new FileChooser.ExtensionFilter("PNG", "*.png"));
  }

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

}

6. Пример Save File

  • TODO

Руководства JavaFX

Show More