【问题标题】:File saved with JFileChooser showSaveDialog even on 'Cancel'即使在“取消”时也使用 JFileChooser showSaveDialog 保存的文件
【发布时间】:2012-02-23 04:22:04
【问题描述】:

我保存了一个文件,除了一个问题外,它工作正常。当按下取消按钮时,文件的副本将保存在 java 目录中。这仅在按下取消按钮时发生,如果使用保存按钮,文件将在用户选择的位置结束。我怎样才能阻止这种情况发生,所以当按下取消按钮时,任何地方都不会保存任何内容?

我的代码如下,感谢所有帮助。谢谢

    // Save dialog
private void savePlaylist() {
JFileChooser savePlaylistDialog = new JFileChooser();
                savePlaylistDialog.setSelectedFile(new File(newPlaylistNameTxt.getText() + ".txt"));
                savePlaylistDialog.showSaveDialog(playlistDialogs);
                File savePlaylist = savePlaylistDialog.getSelectedFile();

                try {
                    outFile = new PrintWriter(new FileWriter(savePlaylist));
                    outFile.println(newPlaylistInformationTxt.getText());
                    outFile.close();

                    // Plays a sound when play() is called (edited from Bombard)
                    try {
                        Clip saveButtonSound = AudioSystem.getClip();
                        AudioInputStream ais = AudioSystem.getAudioInputStream(new File("Tri-tone.wav"));
                        saveButtonSound.open(ais);
                        saveButtonSound.start();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "File could not be written, try again.");
                }
}

【问题讨论】:

    标签: java swing jfilechooser filewriter


    【解决方案1】:

    savePlaylistDialog.showSaveDialog(playlistDialogs);

    上面的那个方法调用返回一个int。您需要检查它的值 - 如果用户单击“保存”按钮,它将返回 JFileChooser.ACCEPTED_OPTION。在这种情况下,您将获取返回值(可以接受/保存或取消),忽略它,然后继续将数据写入磁盘。

    【讨论】:

    • 已经解决了,非常感谢。作为参考,我在下面发布了我的最终代码。
    【解决方案2】:

    这是我使用的固定代码:

        // Save dialog
        private void savePlaylist() {
        JFileChooser savePlaylistDialog = new JFileChooser();
        savePlaylistDialog.setSelectedFile(new File(newPlaylistNameTxt.getText() + ".txt"));
        int status = savePlaylistDialog.showSaveDialog(playlistDialogs);
    
        try {
            if (status == JFileChooser.APPROVE_OPTION) {
                //User has pressed save button
    
                File savePlaylist = savePlaylistDialog.getSelectedFile();
    
                outFile = new PrintWriter(new FileWriter(savePlaylist));
                outFile.println(newPlaylistInformationTxt.getText());
                outFile.close();
    
                // Plays a sound when play() is called (edited from Bombard)
                try {
                    Clip saveButtonSound = AudioSystem.getClip();
                    AudioInputStream ais = AudioSystem.getAudioInputStream(new File("Tri-tone.wav"));
                    saveButtonSound.open(ais);
                    saveButtonSound.start();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            } else if (status == JFileChooser.CANCEL_OPTION) {
                // User has pressed cancel button
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "File could not be written, try again.");
        }
    }
    

    【讨论】:

      【解决方案3】:

      showSaveDialog 应该返回用户是否取消并且您的代码应该采取相应的行动。此时无论用户在保存对话框中做了什么,您都会保存。

      【讨论】:

        猜你喜欢
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多