2011-12-15 1 views
6

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

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

Heres код, я говорю:

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. 

ответ

4

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

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, вы получаете результат, основанный на том, что делает пользователь, так что вам не нужно делать ничего, кроме для интерпретации, что результат

+1

спасибо за редактирование +1 – mKorbel

+0

Огромное спасибо, ребята. используя showOptionDialog вместо createDialog. – philb28

2

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

JOptionPane.OK_OPTION 
JOptionPane.CLOSED_OPTION 
JOptionPane.CANCEL_OPTION 

простой пример here

0

См Class 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"); 
    }  
} 
} 
+0

Не могли бы вы дать объяснение для вашего решения? Я не думаю, что это работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^