Search code examples
javaswingjoptionpane

Creating Dialog from JOptionPane and working on 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.

/Note: Please Don't Suggest me the way of JOptionPane.ShowOptionDialog(*****);** for this issue because i know that way but i need above mentioned way of doing and setting actions for "OK" and "CANCEL" buttons.*/


Solution

  • This works for me:

    ...
    JOptionPane pane = new JOptionPane(message,  JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    JDialog getTopicDialog =  pane.createDialog(null, "New Topic");
    getTopicDialog.setVisible(true);
    if(null == pane.getValue()) {
        System.out.println("User closed dialog");
    }
    else {
        switch(((Integer)pane.getValue()).intValue()) {
        case JOptionPane.OK_OPTION:
            System.out.println("User selected OK");
            break;
        case JOptionPane.CANCEL_OPTION:
            System.out.println("User selected Cancel");
            break;
        default:
            System.out.println("User selected " + pane.getValue());
        }
    }