JFileChooser - Confirmar antes de salvar

Meus amigos, eu estou usando o JFileChooser para salvar um arquivo e quando uso o nome de um arquivo que já existe ele pede pra confirmar antes de sobrescrever, só que ele primeiro fecha o JFileChooser e depois vem a questão, eu quero saber se existe um jeito de perguntar no momento que aperto em salvar sem fechar o JFileChooser, e caso cancele possa escolher outro nome, eis o código que estou usando.

JFileChooser janela = new JFileChooser(); int resultado = janela.showSaveDialog(this); File file = janela.getSelectedFile(); if(resultado == JFileChooser.APPROVE_OPTION){ if(file.exists()){ int response = JOptionPane.showConfirmDialog(null, "Substituir o arquivo existente?", "Confirmar substituição", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (response == JOptionPane.CANCEL_OPTION) { return; } } }

O FileChooser só retorna a opção depois de fechar mesmo.

Eu diria pra abrir novamente o file chooser caso o usuário cancele o OptionPane. Você pode criar um método que automatize o processo. Algo assim:

public void createSaveDialog(File defaultFile) { // Método que cria o FileChooser e recebe o arquivo inicial JFileChooser janela = new JFileChooser(); if (defaultFile != null) { // Se o arquivo inicial foi especificado, seta no FileChooser janela.setSelectedFile(defaultFile); } int resultado = janela.showSaveDialog(this); File file = janela.getSelectedFile(); if(resultado == JFileChooser.APPROVE_OPTION){ if(file.exists()){ int response = JOptionPane.showConfirmDialog(this, "Substituir o arquivo existente?", "Confirmar substituição", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (response == JOptionPane.CANCEL_OPTION) { createSaveDialog(janela.getSelectedFile()); // Se o usuário cancelar, chama o método novamente para abrir um FileChooser já com o arquivo selecionado. } } } }
Então quando precisar abrir o SaveDialog, é só chamar o método.