JavaFX FileChooser Filefilter 不返回扩展名
JavaFX FileChooser Filefilter not returning extension
在我的项目中,我使用 JavaFX FileChooser 让用户保存文件。我注意到一个错误,其中具有指定文件过滤器的文件在 Linux 系统上总是保存为 .txt。从另一个 Whosebug 线程我了解到,与 Windows 不同,在 Linux 上 fileChooser.showSaveDialog();
returns 一个没有所选文件扩展名的文件。我相信,这种不规则的实施有一个非常明显的原因,我不理解。但我仍然不确定如何根据我的需要进行调整。
我知道还有其他一些关于类似主题的已解决线程,但所有解决方案都是基于从返回的文件中提取扩展名,在我的例子中,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。给定的扩展过滤器可能有多个扩展,因此您必须选择一个来任意添加。
在我的项目中,我使用 JavaFX FileChooser 让用户保存文件。我注意到一个错误,其中具有指定文件过滤器的文件在 Linux 系统上总是保存为 .txt。从另一个 Whosebug 线程我了解到,与 Windows 不同,在 Linux 上 fileChooser.showSaveDialog();
returns 一个没有所选文件扩展名的文件。我相信,这种不规则的实施有一个非常明显的原因,我不理解。但我仍然不确定如何根据我的需要进行调整。
我知道还有其他一些关于类似主题的已解决线程,但所有解决方案都是基于从返回的文件中提取扩展名,在我的例子中,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。给定的扩展过滤器可能有多个扩展,因此您必须选择一个来任意添加。