带有确认对话框的JFileChooser

Rob*_*sbé 38 java swing confirmation

我正在开发一个程序,用于加载和保存文本文件中的数据,我正在向用户询问加载和保存JFileChooser的文件名.

这个问题是关于保存对话框:new JFileChooser().showSaveDialog();.然后,用户可以在没有任何警告的情况下覆盖现有文件,这将是一个问题.

有关如何解决此问题的任何建议?我一直在寻找一些方法或选项,但我没有找到任何东西.

提前致谢.

Rob*_*sbé 78

感谢您的回答,但我找到了另一种解决方法,以这种方式覆盖了JFileChooser的approveSelection():

JFileChooser example = new JFileChooser(){
    @Override
    public void approveSelection(){
        File f = getSelectedFile();
        if(f.exists() && getDialogType() == SAVE_DIALOG){
            int result = JOptionPane.showConfirmDialog(this,"The file exists, overwrite?","Existing file",JOptionPane.YES_NO_CANCEL_OPTION);
            switch(result){
                case JOptionPane.YES_OPTION:
                    super.approveSelection();
                    return;
                case JOptionPane.NO_OPTION:
                    return;
                case JOptionPane.CLOSED_OPTION:
                    return;
                case JOptionPane.CANCEL_OPTION:
                    cancelSelection();
                    return;
            }
        }
        super.approveSelection();
    }        
}
Run Code Online (Sandbox Code Playgroud)

我希望这对其他人有用.


kmi*_*ndi 6

正如 AvrDragon 所说,不处理 X 关闭。我添加了一个默认情况来处理所有不相关的选项:

final JFileChooser fc = new JFileChooser() {

        private static final long serialVersionUID = 7919427933588163126L;

        public void approveSelection() {
            File f = getSelectedFile();
            if (f.exists() && getDialogType() == SAVE_DIALOG) {
                int result = JOptionPane.showConfirmDialog(this,
                        "The file exists, overwrite?", "Existing file",
                        JOptionPane.YES_NO_CANCEL_OPTION);
                switch (result) {
                case JOptionPane.YES_OPTION:
                    super.approveSelection();
                    return;
                case JOptionPane.CANCEL_OPTION:
                    cancelSelection();
                    return;
                default:
                    return;
                }
            }
            super.approveSelection();
        }
    };
Run Code Online (Sandbox Code Playgroud)