mkyong examples example chooser java swing confirmation

mkyong - jfilechooser java swing examples



JFileChooser con diĆ”logo de confirmaciĆ³n (5)

Como dijo AvrDragon, cerrar con X no se maneja. Agregué un caso predeterminado para manejar todas las opciones irrelevantes:

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(); } };

Estoy trabajando en un programa que carga y guarda datos de archivos de texto, y le pido al usuario un nombre de archivo con JFileChooser al cargarlo y guardarlo.

Esta pregunta es sobre el diálogo guardar : new JFileChooser().showSaveDialog(); . El usuario podría sobrescribir un archivo existente sin ninguna advertencia, y eso sería un problema .

¿Alguna sugerencia sobre cómo solucionar esto? He estado buscando algún método u opción, pero no encontré nada.

Gracias por adelantado.


Escribí esto basado en tu propia respuesta. Publicado en caso de que alguien más lo encuentre útil:

final JFileChooser exportFileChooser = new JFileChooser(); exportFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); exportFileChooser.setApproveButtonText("Export"); final JButton exportButton = new JButton("Export text file"); exportButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int returnVal = exportFileChooser.showSaveDialog(exportButton .getParent()); if (returnVal == JFileChooser.APPROVE_OPTION) { File outputFile = exportFileChooser.getSelectedFile(); if (outputFileIsValid(outputFile)) { exportFile(outputFile); } } } private boolean outputFileIsValid(File outputFile) { boolean fileIsValid = false; if (outputFile.exists()) { int result = JOptionPane.showConfirmDialog( exportButton.getParent(), "File exists, overwrite?", "File exists", JOptionPane.YES_NO_CANCEL_OPTION); switch (result) { case JOptionPane.YES_OPTION: fileIsValid = true; break; default: fileIsValid = false; } } else { fileIsValid = true; } return fileIsValid; } });


Gracias por las respuestas, pero encontré otra solución, anulando el approveSelection () del JFileChooser, de esta manera:

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(); } }

Espero que esto pueda ser útil para otra persona.



Verifique antes de guardar si el mismo archivo ya existe y pida confirmación al usuario ¿realmente desea anularlo?

JDialog.setDefaultLookAndFeelDecorated(true); int response = JOptionPane.showConfirmDialog(null, "Are you sure you want to override existing file?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (response == JOptionPane.NO_OPTION) { System.out.println("No button clicked"); } else if (response == JOptionPane.YES_OPTION) { System.out.println("Yes button clicked"); } else if (response == JOptionPane.CLOSED_OPTION) { System.out.println("JOptionPane closed"); }

here está el código

Para verificar el archivo ya existe, usa

boolean exists = (new File("filename")).exists(); if (exists) { // File or directory exists } else { // File or directory does not exist }