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
.