How to make JOptionPane.showConfirmDialog have No selected by default?

前端 未结 5 712
感动是毒
感动是毒 2020-12-11 00:04

I implemented a Save As dialog in Java that prompts the user if the file already exists, and I want the No option to be selected by default. How do I do this?

Here i

相关标签:
5条回答
  • 2020-12-11 00:40

    For the above example, it is JOptionPane.showOptionDialog Those arguments can no be passed to showConfirmDialog because it does not have them.

    More people might be looking for this so why not offer a "working" solution.

    0 讨论(0)
  • 2020-12-11 00:46

    Use this constructor:

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

    where options specifies the buttons, and have initialValue (one of the options values) specify what the default is.

    Update: You can call showOptionDialog rather than showConfirmDialog. The former takes options and initialValue parameters.

    0 讨论(0)
  • 2020-12-11 00:46

    This is my 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);
    }
    
    }
    
    0 讨论(0)
  • 2020-12-11 00:51

    If you don't want to hardcode "Yes" and "No" (for instance when your app is localized for other languages), you can use UIManager resources:

    UIManager.getString("OptionPane.yesButtonText", l)
    UIManager.getString("OptionPane.noButtonText", l)
    
    0 讨论(0)
  • 2020-12-11 00:53

    That's the first thing that comes to my mind.

    //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]);
    

    But probably there's a better approach.

    0 讨论(0)
提交回复
热议问题