【问题标题】:JavaFX FileChooser: how to set file filters?JavaFX FileChooser:如何设置文件过滤器?
【发布时间】:2012-11-18 01:05:45
【问题描述】:

我想在 JavaFX FileChooser 中设置文件过滤器,但找不到方法。

我的代码:

  FileChooser fc = new FileChooser();
  fc.setTitle("My File Chooser");
  File f = fc.showOpenDialog(primaryStage);
  System.out.println(f);

【问题讨论】:

标签: java user-interface javafx-2 filechooser


【解决方案1】:

你可以这样做:

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

这是一个简单的例子:

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

【讨论】:

  • 谢谢,它确实有效。我在文档中看到了 getExtensionFilters(),但我期待 addExtensionFilter() 或 setExtensionFilters() 之类的东西。
  • 可以在这里重用 FileChooser 还是必须为每个事件发生创建它?
【解决方案2】:

JavaFX 更新加上多个扩展过滤器:

FileChooser fc = new FileChooser();

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

fc.getExtensionFilters().add(fileExtensions);

【讨论】:

    【解决方案3】:

    你可以这样做。

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

    【讨论】:

    • 这是@Zon 提供的答案的副本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2016-06-25
    • 2016-05-28
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多