JOptionPane.createDialog и OK_CANCEL_OPTION - PullRequest
       4

JOptionPane.createDialog и OK_CANCEL_OPTION

6 голосов
/ 15 декабря 2011

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

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

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

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.

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Я думаю, что лучшим вариантом для вас было бы использовать следующий код

    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
        //....
    }

, используя метод showOptionDialog, вы получаете результат на основе того, что делает пользователь, поэтому вам не нужноделать что-либо еще, кроме как интерпретировать этот результат

2 голосов
/ 15 декабря 2011

JOptionPane возвращает в вашем случае

JOptionPane.OK_OPTION
JOptionPane.CLOSED_OPTION
JOptionPane.CANCEL_OPTION

простой пример здесь

0 голосов
/ 19 марта 2016

См. Класс JOptionPane .Начните читать текст в пункте «Примеры»:

Вот мой полный пример:

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Main {
public static void main(String[] args) {

    JTextField topicTitle = new JTextField();
    JTextField topicDesc = new JTextField();


    Object[] message = {"Title: ", topicTitle, "Description: ", topicDesc};

    JOptionPane pane = new JOptionPane(message,  
            JOptionPane.PLAIN_MESSAGE, 
            JOptionPane.YES_NO_CANCEL_OPTION);

    JDialog getTopicDialog =  pane.createDialog(null, "New Topic");
    getTopicDialog.setVisible(true);        

    Object selectedValue = pane.getValue();
    int n = -1;


    if(selectedValue == null)
        n = JOptionPane.CLOSED_OPTION;      
    else
        n = Integer.parseInt(selectedValue.toString());


    if (n == JOptionPane.YES_OPTION){
        System.out.println("Yes");
    } else if (n == JOptionPane.NO_OPTION){
        System.out.println("No");
    } else if (n == JOptionPane.CANCEL_OPTION){
        System.out.println("Cancel");
    } else if (n == JOptionPane.CLOSED_OPTION){
        System.out.println("Close");
    }       
}
}
...