繁体   English   中英

JavaFX FileChooser Filefilter没有返回扩展名

[英]JavaFX FileChooser Filefilter not returning extension

在我的项目中,我使用JavaFX FileChooser让用户保存文件。 我注意到一个错误,其中带有指定文件过滤器的文件总是在Linux系统上保存为.txt。 从另一个stackoverflow线程我倾斜,不像Windows,在Linux上fileChooser.showSaveDialog(); 返回没有选定文件扩展名的文件。 我有信心,这种不规范的实施有一个非常明显的原因,我不理解。 但我仍然不确定如何根据我的需要调整它。

我知道有一些关于类似主题的其他解决线程,但所有解决方案都基于从返回的文件中提取扩展,在我的情况下,showSaveDialog没有返回扩展。

如果用户未使用所选过滤器键入一个扩展,则添加扩展名的示例如下:

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Save to file.");
    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            FileChooser fc = new FileChooser();
            FileChooser.ExtensionFilter xmlfilter = new FileChooser.ExtensionFilter("XML", "*.xml");
            FileChooser.ExtensionFilter mffilter = new FileChooser.ExtensionFilter("mf", "*.mf");
            fc.getExtensionFilters().addAll(xmlfilter,mffilter);
            fc.setSelectedExtensionFilter(xmlfilter);
            File f = fc.showSaveDialog(primaryStage.getOwner());
            System.out.println("f = " + f);
            if(null == f) {
                return;
            }
            final String selected_description = fc.getSelectedExtensionFilter().getDescription();
            System.out.println("selected_description = " + selected_description);          
            if(selected_description.equals(xmlfilter.getDescription()) && !f.getName().endsWith(".xml")) {
                f = new File(f.getParent(),f.getName()+".xml"); 
            } else if(selected_description.equals(mffilter.getDescription()) && !f.getName().endsWith(".mf")) {
                f = new File(f.getParent(),f.getName()+".mf");
            }
            System.out.println("f = " + f);
        }
    });

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

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

    primaryStage.setTitle("Example");
    primaryStage.setScene(scene);
    primaryStage.show();
}

我在linux上测试过,从未看到它添加.txt。 给定的扩展名过滤器可能有多个扩展名,因此您必须选择一个以随意添加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM