【问题标题】:How to open Photos by the FileChooser with a certain extension with JavaFX?如何使用 JavaFX 通过具有特定扩展名的 FileChooser 打开照片?
【发布时间】:2015-06-28 02:24:26
【问题描述】:

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

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

任何人都可以帮助我吗?

【问题讨论】:

    标签: javafx filechooser


    【解决方案1】:

    FileChooser 类有一个嵌套类ExtensionFilter。首先你必须创建它的一个实例:

    FileChooser.ExtensionFilter imageFilter
        = new FileChooser.ExtensionFilter("Image Files", "*.jpg", "*.png");
    

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

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

    Minimal Complete Verifiable Example 代码如下:

    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);
      }
    }
    

    【讨论】:

    • 您的问题对我帮助很大,谢谢,但是如果文件选择器中选择的文件不是图像,您能否更新您的答案并添加条件?
    • 如果在文件选择器上设置了过滤器,那么除了 png 或 jpg 之外,没有其他文件可以选择。如果有人将例如文本文件 (.txt) 更改为 png,那么您将遇到麻烦。但是,如果您想从该文件创建 JavaFX 图像,这无关紧要,因为 Image(String url) 不会在错误的文件类型上引发异常。
    • 对不起,我不明白你的意思。您是什么意思“因为 Image(String url) 不会在错误的文件类型上引发异常”。 ?
    • 您可以在 Image 的构造函数 url 中放置一个文本文件,这只会设置 Image 的错误属性,但不会抛出异常。因此,即使其中只有一个文本文件,您也可以读取包含图像的整个目录,而不会因异常而停止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2012-09-13
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    相关资源
    最近更新 更多