showinputdialog showconfirmdialog cerrar cancelar boton automaticamente java swing joptionpane

java - cerrar - ¿Cómo hacer que JOptionPane.showConfirmDialog no tenga seleccionado por defecto?



joptionpane.showinputdialog boton cancelar (5)

Implementé un cuadro de diálogo Guardar como en Java que pregunta al usuario si el archivo ya existe y quiero que la opción No se seleccione de forma predeterminada. ¿Cómo hago esto?

Aquí está mi código actual:

JFileChooser chooser = new JFileChooser() { public void approveSelection() { File selectedFile = getSelectedFile(); if (selectedFile != null && selectedFile.exists( ) ) { int response = JOptionPane.showConfirmDialog( this, "The file " + selectedFile.getName() + " already exists." + " Do you want to replace the existing file?", getDialogTitle(), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (response != JOptionPane.YES_OPTION ) { return; } } super.approveSelection(); } };


Eso es lo primero que me viene a la mente.

//Custom button text Object[] options = {"Yes", "No"}; JOptionPane.showOptionDialog(this, "The file " + selectedFile.getName() + " already exists. Do you want to replace the existing file?", getDialogTitle(), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);

Pero probablemente hay un mejor enfoque.


Esta es mi solución:

import java.awt.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; public class NegativeDefaultButtonJOptionPane { public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType) { List<Object> options = new ArrayList<Object>(); Object defaultOption; switch(optionType){ case JOptionPane.OK_CANCEL_OPTION: options.add(UIManager.getString("OptionPane.okButtonText")); options.add(UIManager.getString("OptionPane.cancelButtonText")); defaultOption = UIManager.getString("OptionPane.cancelButtonText"); break; case JOptionPane.YES_NO_OPTION: options.add(UIManager.getString("OptionPane.yesButtonText")); options.add(UIManager.getString("OptionPane.noButtonText")); defaultOption = UIManager.getString("OptionPane.noButtonText"); break; case JOptionPane.YES_NO_CANCEL_OPTION: options.add(UIManager.getString("OptionPane.yesButtonText")); options.add(UIManager.getString("OptionPane.noButtonText")); options.add(UIManager.getString("OptionPane.cancelButtonText")); defaultOption = UIManager.getString("OptionPane.cancelButtonText"); break; default: throw new IllegalArgumentException("Unknown optionType "+optionType); } return JOptionPane.showOptionDialog(parentComponent, message, title, optionType, JOptionPane.QUESTION_MESSAGE, null, options.toArray(), defaultOption); } }


Para el ejemplo anterior, es JOptionPane.showOptionDialog Esos argumentos no se pueden pasar a showConfirmDialog porque no los tiene.

Más personas podrían estar buscando esto, ¿por qué no ofrecer una solución "de trabajo"?


Si no desea codificar "Sí" y "No" (por ejemplo, cuando su aplicación está traducida a otros idiomas), puede utilizar los recursos de UIManager:

UIManager.getString("OptionPane.yesButtonText", l) UIManager.getString("OptionPane.noButtonText", l)


Usa este constructor:

JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue)

donde options especifica los botones y tiene initialValue (uno de los valores de las options ) especifica cuál es el valor predeterminado.

Actualización: puede llamar a showOptionDialog lugar de showConfirmDialog . El primero toma las options y los parámetros initialValue .