2015-11-30 6 views
1

Я пытаюсь создать GUI для своей программы. В этом конкретном графическом интерфейсе используется JOptionsPane с showOptionDialog. Я добавил панель к этой панели параметров, в которой есть некоторые прослушиватели действий, а также два списка и некоторые другие вещи, которые действительно не имеют значения для этого вопроса.ShowOptionDialog отменить вариант не работает

Довольно просто я хочу, чтобы мой showOptionDialog выполнял какое-либо действие, когда пользователь нажимает кнопку «Отменить». (Это будет в основном закончить программу, но это должно быть сделано определенным образом). Прямо сейчас, когда пользователь нажимает «отменить», программа продолжается, как если бы пользователь только закончил это диалоговое окно, но никаких действий не было предпринято. Я пытаюсь изменить переменную, если они нажимают кнопку «Отмена», что предотвратит запуск остальной части программы. Я протестировал с помощью System.out.println, чтобы узнать, действительно ли изменилось мое значение, и я обнаружил, что этот шаг не происходит вообще. Поэтому я хотел бы знать на основе этого кода, что я делаю неправильно. Что мне нужно сделать, чтобы код работал правильно, когда пользователь нажимает кнопку «Отменить»?

У меня нет больше кода для показа, поскольку моя программа очень большая, и я не могу изолировать эту ситуацию.

Заранее благодарим за помощь!

public static void displayGUI(){ 

     int result = JOptionPane.showOptionDialog(null, getPanel(),"JOptionPane Example : ", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new String[]{"Confirm","Create Return"}, "default"); 

     if(result == JOptionPane.CANCEL_OPTION){ 
      initialScreenDecisions="NONE"; 
      MainWriter.finishedCounter=true; 
      System.out.println(MainWriter.finishedCounter); 
      while(MainWriter.entryDetails.size()>0){ 
       MainWriter.entryDetails.remove(0); 
      } 
      while(output.size()>0){ 
       output.remove(0); 
      } 
     } 
    } 

* Эта часть кода не выполняется, даже если пользователь выбирает отменить:

if(result == JOptionPane.CANCEL_OPTION){ 
      initialScreenDecisions="NONE"; 
      MainWriter.finishedCounter=true; 
      System.out.println(MainWriter.finishedCounter); 
      while(MainWriter.entryDetails.size()>0){ 
       MainWriter.entryDetails.remove(0); 
      } 
      while(output.size()>0){ 
       output.remove(0); 
      } 
     } 
+0

вы пробовали распечатав значение 'result' посмотреть, что на самом деле вернулось? – steven35

+0

@ steven35 Хотя это хороший совет на его поверхности, 'result' является значением int, которое используется как переименование, которое необходимо сравнить с различными константами JOptionPane, что делает некоторые очевидные значения для его значения несколько сложными. (Вам нужно прорваться через [Javadocs] (http://docs.oracle.com/javase/7/docs/api/constant-values.html#javax.swing.JOptionPane.CANCEL_OPTION), чтобы найти связанное с ним значение). Отсутствие фактических перечислений для 'JOptionPane' является одной из моих самых больших жалоб в отношении другого полезного класса. –

+0

«результат» установлен на индекс нажатой кнопки, где кнопки создаются из массива объектов, переданного в (в данном случае «Подтвердить» и «Создать возврат»). – FredK

ответ

1

из вашего вопроса:
*This part of the code isn't being executed, even if the user selects cancel:

Попробуйте The integer значение, которое возвращается из JOptionPane.showOptionDialog()0 возвращается, если OK есть. выбранных и 1 возвращается, если выбрано Cancel.

Измените code следующим образом:

if(result == 1){ 
     initialScreenDecisions="NONE"; 
     MainWriter.finishedCounter=true; 
     System.out.println(MainWriter.finishedCounter); 
     while(MainWriter.entryDetails.size()>0){ 
      MainWriter.entryDetails.remove(0); 
     } 
     while(output.size()>0){ 
      output.remove(0); 
     } 
    } 

Позвольте мне знать, если это не помогает вам !!!

+0

Если этот ответ поможет вам в дальнейшем поддержать и принять ответ. Спасибо :) – Adil

+0

Спасибо большое! Это решило мою проблему мгновенно. Очень полезно сейчас мне не нужно продолжать борьбу с такой простой проблемой, очень расстраивая, когда я могу использовать слушателей действий и двойные списки, но не могу получить что-то простое в работе, но теперь это прекрасно! – jesric1029

+0

Ваше приветствие :) – Adil

1

Вы рассказываете JOptionPane создать две кнопки («Подтвердить» и «Создать возврат»), а затем сообщая, что кнопка по умолчанию «по умолчанию», но у вас нет кнопки с текстом «по умолчанию». У вас также нет «Отмена». Возвращаемое значение будет равно 0, если использование выбирает «Подтвердить» или 1, если пользователь выбирает «Создать возврат» или CLOSED_OPTION, если пользователь просто закрывает диалог.

0

Когда назначая result значение, которое вы используете JOptionPane.OK_CANCEL_OPTION, но в если условие вы проверяете для JOptionPane.CANCEL_OPTION

1

Если вы посмотрите на JavaDocs для JOptionPane.showOptionDialog, он говорит вам

Возвраты:
        целое число, указывающее параметр, выбранный пользователем, или CLOSED_OPTION, если пользователь закрыл диалоговое окно

Это индекс массива options, который вы передали методу.В этом случае new String[]{"Confirm","Create Return"}

Так возвращаемое значение 0 будет означать Confirm был выбран и 1 будет означать Create Return был выбран (или JOptionPane.CLOSE_OPTION если пользователь закрыл окно)

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