【发布时间】:2019-09-02 22:43:29
【问题描述】:
我在一个菜单栏中有两个按钮,其中包含一个保存和另存为按钮。但是,我目前有两个相同的代码,并且它会像当前一样保存并提示用户他们想要保存的位置。我希望保存按钮只保存而不提示对话框,除非文件尚不存在。
我曾尝试摆弄代码以尝试找出解决方法,但还没有弄清楚。
fileMenu.getItems().add(saveItem);
saveItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser saveFile = new FileChooser();
saveFile.getExtensionFilters().add(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg"));
saveFile.setTitle("Save File");
File file = saveFile.showSaveDialog(stage);
if (file != null) {
try {
WritableImage writableImage = new WritableImage(width, height);
canvas.snapshot(null, writableImage);
RenderedImage renderedImage = SwingFXUtils.fromFXImage(writableImage, null);
ImageIO.write(renderedImage, "png", file);
} catch (IOException ex) {
System.out.println("Error");
}
}
}
});
fileMenu.getItems().add(saveAsItem);
saveAsItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser saveFile = new FileChooser();
saveFile.getExtensionFilters().add(new FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg"));
saveFile.setTitle("Save File");
File file = saveFile.showSaveDialog(stage);
if (file != null) {
try {
WritableImage writableImage = new WritableImage(width, height);
canvas.snapshot(null, writableImage);
RenderedImage renderedImage = SwingFXUtils.fromFXImage(writableImage, null);
ImageIO.write(renderedImage, "png", file);
} catch (IOException ex) {
System.out.println("Error");
}
}
}
});
代码当前为每个保存按钮执行完全相同的保存功能。我希望它只提示另存为按钮。
【问题讨论】:
-
好吧,“保存”将取决于“另存为”(或“打开”),因为它依赖于事先知道您将要保存的“位置”。考虑到这一点,您需要将位置“存储”在以后可以访问的某个位置(例如经理或其他东西)。一旦你有了这些信息,你可以编写一个“saveTo”方法,它引用
File并执行实际的保存操作,这样save和saveAs只需要调用这个方法并传入前面- 提及File引用,来自内存或来自用户 -
我的第一个建议是编写一个
saveTo方法,它采用File引用并执行保存操作。从那里,您需要填写save和saveAs的要求,以便他们可以获得对用户想要使用的File的引用并将其传递给saveTo方法