Search code examples
javaswingjdialogjoptionpane

JOptionPane.createDialog and OK_CANCEL_OPTION


I have a custom dialog box that collects two strings from the user. I use OK_CANCEL_OPTION for the option type when creating the dialog. Evertyhings works except when a user clicks cancel or closes the dialog it has the same effect has clicking the OK button.

How can i handle the cancel and close events?

Heres the code I'm talking about:

JTextField topicTitle = new JTextField();
JTextField topicDesc = new JTextField();
Object[] message = {"Title: ", topicTitle, "Description: ", topicDesc};

JOptionPane pane = new JOptionPane(message,  JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog getTopicDialog =  pane.createDialog(null, "New Topic");
getTopicDialog.setVisible(true);

// Do something here when OK is pressed but just dispose when cancel is pressed.

Solution

  • I think a better option for you would be to use the following code

        JTextField topicTitle = new JTextField();
        JTextField topicDesc = new JTextField();
        Object[] message = {"Title: ", topicTitle, "Description: ", topicDesc};
    
    
        Object[] options = { "Yes", "No" };
        int n = JOptionPane.showOptionDialog(new JFrame(),
                message, "",
                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
                options, options[1]);
        if(n == JOptionPane.OK_OPTION){ // Afirmative
            //.... 
        }
        if(n == JOptionPane.NO_OPTION){ // negative
            //....
        }
        if(n == JOptionPane.CLOSED_OPTION){ // closed the dialog
            //....
        }
    

    by using the showOptionDialog method, you are getting an result based on what the user does, so you don't need to do anything else except for interpret that result