J'ai mis en œuvre une boîte de dialogue Enregistrer sous Java qui invite l'utilisateur si le fichier existe déjà et que je souhaite que l'option NO sélectionnée par défaut. Comment puis-je faire cela?
Voici mon code actuel:
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();
}
};
Utilisez ce constructeur:
JOptionPane(Object message, int messageType, int optionType,
Icon icon, Object[] options, Object initialValue)
où options
spécifie les boutons et initialValue
(une des valeurs options
) Spécifiez quelle est la valeur par défaut.
Mise à jour : Vous pouvez appeler showOptionDialog
plutôt que showConfirmDialog
. Le premier prend options
et initialValue
paramètres.
C'est la première chose qui me vient à l'esprit.
//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]);
Mais probablement il y a une meilleure approche.
C'est ma solution:
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);
}
}
Si vous ne voulez pas coder "Oui" et "Non" (par exemple, lorsque votre application est localisée pour d'autres langues), vous pouvez utiliser des ressources umanager:
UIManager.getString("OptionPane.yesButtonText", l)
UIManager.getString("OptionPane.noButtonText", l)
Pour l'exemple ci-dessus, c'est JOptionPane.showOptionDialog
Ces arguments ne peuvent pas être transmis à showConfirmDialog
parce que cela ne les a pas.
Plus de gens pourraient être à la recherche de cela, alors pourquoi ne pas offrir une solution "travail".