2013-03-25 5 views
0

Создаю программу для случайных процессов (таких 2 + 2, 14/2 и т. Д.).Ждите слушателя в do ... while GUI

Я пытаюсь создать графический интерфейс. У меня есть 5 кнопок (Добавить для Add, отд для разделяй и т.д.) Когда пользователь нажимает на кнопку Add я отправить сообщение для JTextArea, чтобы добавить сообщение:

2 + 4 =

(или других случайных чисел)

У меня есть JTextField, который пользователь может написать ответ. Так что, если он написал 6 появляется сообщение об успешном выполнении в JText области (то же самое, если он поставил неправильный ответ, но сообщение об ошибке) и 2 других случайных чисел тоже так:

2 + 4 = 6

Да!

3 + 4 =

И продолжается до тех пор метод c.isOverLimit() не возвращает истину (После 10 процессов).

int x = 10; 

do { 
    String string = String.format("%d %s %d =", p.getNumber1(), 
            p.getOperator(), p.getNumber2()); 
    writeMessage(string); 
    textField.addActionListener(
    new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try { 
       p.checkAnswer(Double.parseDouble(e.getActionCommand())); 
       writeMessage(p.getMessage(Double.parseDouble(
               e.getActionCommand()))); 
       textField.setText(""); 
      } 
      catch(Exception ex) { 
       System.out.println(ex.getMessage()); 
      } 
     } 
    } 
    ); 
    c = Proccess.getCounter(); 
    x--; 
} 
while (x != 0); 

Моя проблема заключается в том, что, когда я нажать на кнопку Добавить у меня есть этот выход:

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

4 + 3 =

неправильный в том, что делать .. .while работает 10 раз и не останавливается на ответах пользователя. Dont обратите внимание на методы, которые я использую. Моя программа работает правильно в консольной программе, так что моя ошибка в то время как ... do

Извините за мой английский. Спасибо!

+0

Кажется, вы не понимаете, как работают события. Почему вы добавляете один и тот же прослушиватель 10 раз в текстовое поле? Вам не нужно ждать слушателя. Слушатель вызывается Swing, когда пользователь нажимает кнопку ввода в текстовое поле. –

ответ

0

Подсчет количества вызовов должен выполняться в методе actionPerformed. Снимите петлю do...while:

int x = 10; 
textField.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     if (x >= 0) { 
      try { 
       p.checkAnswer(Double.parseDouble(e.getActionCommand())); 
       writeMessage(p.getMessage(Double.parseDouble(e.getActionCommand()))); 
       textField.setText(""); 
      } catch(Exception ex){ 
       System.out.println(ex.getMessage()); 
      } 
      x--; 
     } else { 
      // quit, or whatever you want to do 
     } 
    } 
});