Создание диалогового окна из JOptionPane и работа над OK_CANCEL_OPTION

У меня есть пользовательское диалоговое окно, которое собирает две строки от пользователя. Я использую OK_CANCEL_OPTION для типа опции при создании диалога. Evertyhings работает, за исключением случаев, когда пользователь нажимает кнопку «Отмена» или закрывает диалоговое окно, которое имеет тот же эффект, что и нажатие кнопки «ОК».

Как я могу обрабатывать события отмены и закрытия?

Вот код, о котором я говорю:

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

// Делаем что-то здесь, когда нажимаем OK, но просто удаляем, когда нажимаем отмену.

/Примечание: не предлагайте мне способ JOptionPane.ShowOptionDialog(*****);** для этой проблемы, потому что я знаю это, но мне нужен вышеупомянутый способ сделать и настроить действия для кнопок «ОК» и «ОТМЕНА». */


person Sekhar    schedule 05.02.2013    source источник
comment
пожалуйста, этот вопрос касается, прочитайте учебник по Oracle, выполните поиск здесь, на этом форуме   -  person mKorbel    schedule 05.02.2013


Ответы (2)


Это работает для меня:

...
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());
    }
}
person fzborrego    schedule 05.02.2013

Согласно документации, вы можете использовать pane.getValue(), чтобы узнать, какая кнопка была нажата. Из документации:

Прямое использование. Чтобы создать и использовать JOptionPane напрямую, стандартный шаблон выглядит примерно следующим образом:

     JOptionPane pane = new JOptionPane(arguments);
     pane.set.Xxxx(...); // Configure
     JDialog dialog = pane.createDialog(parentComponent, title);
     dialog.show();
     Object selectedValue = pane.getValue();
     if(selectedValue == null)
       return CLOSED_OPTION;
     //If there is not an array of option buttons:
     if(options == null) {
       if(selectedValue instanceof Integer)
          return ((Integer)selectedValue).intValue();
       return CLOSED_OPTION;
     }
     //If there is an array of option buttons:
     for(int counter = 0, maxCounter = options.length;
        counter < maxCounter; counter++) {
        if(options[counter].equals(selectedValue))
        return counter;
     }
     return CLOSED_OPTION;

Надеюсь, поможет,

person Esteban Aliverti    schedule 05.02.2013