Изменение текста метки при нажатии кнопки

#java #swing #actionevent

#java #swing #actionevent

Вопрос:

Я пытаюсь создать swing-приложение, представляющее собой тест. Мне нужно, чтобы JLabel менялся при нажатии кнопки, но когда я нажимаю кнопку, приложение блокируется. Может ли кто-нибудь указать мне правильное направление?

Мой код нажатия кнопки приведен ниже:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String[] questions = {"test0","test1","test2","test3","test4","test5","test6"};
    String[] answers = {"","","","","","",""};
    int i = 0;

    do {
        jLabel2.setText(questions[i]);
        index.setText(String.valueOf(i));
        if (txtAnswer.getText().toLowerCase().equals(answers[i].toLowerCase())) {
            i  ;
            jLabel2.setText(questions[i]);
        }
        else {
            add(lblWrong);
        }
    }
    while(i < 7);
}      
  

Я получаю предупреждение о том, что параметр evt не использовался, может ли это быть проблемой?

Спасибо

Комментарии:

1. разве у вас не должно быть ваших меток в массиве?

2. Мои метки объявляются вне метода actionevent

3. Я не понимаю. Вы просто повторяете 7 раз и обновляете одну и ту же JLabel? В чем смысл этого

Ответ №1:

Вам не нужен цикл do while. Это захватывает вас в методе нажатия кнопки, как будто вы получаете неправильный ответ, вы продолжаете вводить else и не можете оставить его, останавливая работу приложения. Замените его на оператор if, проверяющий, является ли i < 7.

Ответ №2:

В else состоянии вашего цикла вы вообще не добавляете 1 к i — следовательно, вы потенциально можете оказаться в ситуации, когда оно никогда не увеличивается, таким образом, это будет бесконечный цикл (блокировка вашей программы).

Комментарии:

1. Я не хочу, чтобы они двигались дальше, пока не сделают все правильно. Разве я не должен увеличивать его только в операторе if?