web-dev-qa-db-fra.com

Comment faire JOPTIONPANE.ShowConfirmdialog n'a pas été sélectionné par défaut?

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

Utilisez ce constructeur:

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

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.

16
Vinay Sajip

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.

20
Carlos Tasada

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

}
6
subes

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)
6
Koen Weyn

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".

1
Cristian