2011-12-15 10 views
6

Mam niestandardowe okno dialogowe, które zbiera dwa ciągi od użytkownika. Używam OK_CANCEL_OPTION dla typu opcji podczas tworzenia okna dialogowego. Evertyhings działa, z wyjątkiem sytuacji, gdy użytkownik kliknie anuluj lub zamknie okno dialogowe, które ma ten sam efekt, co kliknięcie przycisku OK.JOptionPane.createDialog i OK_CANCEL_OPTION

Jak mogę obsłużyć zdarzenia anulowania i zamknięcia?

Herezje kod mówię:

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. 

Odpowiedz

4

myślę, że lepszym rozwiązaniem dla Ciebie byłoby użyć następujący kod:

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

za pomocą metody showOptionDialog, jesteś coraz wynik w oparciu o to, co robi użytkownik, więc nie trzeba robić nic innego oprócz interpretacji tego wyniku

+1

dzięki za edycji +1 – mKorbel

+0

Wielkie dzięki chłopaki. przy użyciu showOptionDialog zamiast createDialog działa. – philb28

2

JOptionPane zwrotów w danym przypadku

JOptionPane.OK_OPTION 
JOptionPane.CLOSED_OPTION 
JOptionPane.CANCEL_OPTION 

prosty przykład here

0

Zobacz Class JOptionPane. Zacznij czytać w tekście w punkcie „Przykłady:”

Oto mój pełny przykład:

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

Czy mógłbyś wyjaśnić swoje rozwiązanie? Nie sądzę, że to działa. –

Powiązane problemy