如何通过带有 JavaFX 的特定扩展名的 FileChooser 打开照片?

1 javafx filechooser

我正在制作照片管理器,我正在寻找如何从FileChooser带有一些扩展名的文件中获取文件:*.png - *.jpg ...那么我应该使用哪种方法或应该使用哪种代码?

我试过这个:fileChooser.getExtensionFilters();但它没有任何作用。

有谁能够帮助我?

aw-*_*ink 6

文件选择器类有一个嵌套类ExtensionFilter。首先,您必须创建它的一个实例:

FileChooser.ExtensionFilter imageFilter
    = new FileChooser.ExtensionFilter("Image Files", "*.jpg", "*.png");
Run Code Online (Sandbox Code Playgroud)

之后,您可以将此实例添加到 FileChooser 的扩展列表中:

FileChooser fc = new FileChooser();
fc.getExtensionFilters().add(imageFilter);
Run Code Online (Sandbox Code Playgroud)

一个最小的完整可验证示例代码如下:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class FileChooserTest extends Application {

  @Override
  public void start(Stage primaryStage) {
    FileChooser.ExtensionFilter imageFilter
        = new FileChooser.ExtensionFilter("Image Files", "*.jpg", "*.png");

    FileChooser fc = new FileChooser();
    fc.getExtensionFilters().add(imageFilter);

    Button btn = new Button();
    btn.setText("Open File");
    btn.setOnAction((ActionEvent event) -> {
      fc.showOpenDialog(primaryStage);
    });

    StackPane root = new StackPane();
    root.getChildren().add(btn);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("FileChooser Demo");
    primaryStage.setScene(scene);
    primaryStage.show();
  }

  public static void main(String[] args) {
    launch(args);
  }
}
Run Code Online (Sandbox Code Playgroud)