передача значения JLabel - PullRequest
       2

передача значения JLabel

3 голосов
/ 11 марта 2012

Привет всем, я в стеке, так что если кто-нибудь может мне помочь, было бы здорово.Поэтому, когда я ввожу какое-то значение в поле jtext, и если это значение совпадает со значением x * y, оно должно исправить значение и общее значение, если они не совпадают, оно должно увеличивать только общее значение.но на данный момент это всегда увеличивает общее количество.Я думаю, что логика, которую я использую, верна, но я что-то упустил.Я использую Eclipse, и программа компилируется и работает.Я предполагаю, что проблема в классе PanelQuizCountdown в методе actionPerformed.Вот код.

/**The driver class of the program. Here is the JFrame 
 * class name RunQuizCountdown.java
 * @author Kiril Anastasov
 * @date 09/03/2012
 */

import java.awt.*;
import javax.swing.*;

public class RunQuizCountdown 
{
    public static void main(String[] args) 
    {
        JFrame application = new JFrame();
        PanelQuizCountdown panel = new PanelQuizCountdown();
        application.add(panel);
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        application.setSize(200,300);
        application.setLocationByPlatform(true);
        application.setVisible(true);
    }

}


/** Here is the thread of the program
 * class name ThreadQuizCountdown.java
 * @author Kiril Anastasov
 * @date 09/03/2012
 */

import javax.swing.JTextField;

public class ThreadQuizCountdown implements Runnable
{
    JTextField  timeField;
    Thread myThread = new Thread(this); 
    int i = 30;
    boolean go = true;

    ThreadQuizCountdown(JTextField theTimeField)
    {
        timeField = theTimeField;
    }

    public void run()
    {       
        while(go)
        {                           
            timeField.setText("" + i);      
            try 
            { 
                myThread.sleep(1000);          
            } 
            catch (InterruptedException ie) 
            {
                 System.out.println("thread exception");
            }       
            if(i == 0 )
            {
                //go = false;
                myThread.stop();
            }
            i--;
        }       
    }

    public void begin()
    {
        myThread.start();
    }

    public void finish()
    {
        myThread.stop();
    }
}
/** Here is the GUI of the program
 * class name PanelQuizCountdown.java
 * @author Kiril Anastasov
 * @date 09/03/2012
 */

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;  
import java.util.Random;

public class PanelQuizCountdown extends JPanel implements ActionListener
{
    JTextField timeField, answerField;
    JLabel messageLabel, correctLabel, totalLabel;
    int x, y;
    int correct;
    int total;
    int result;
    int check;
    Random randomGenerator;

    ThreadQuizCountdown myQuiz;

    PanelQuizCountdown()
    {
        timeField = new JTextField(5);
        myQuiz = new ThreadQuizCountdown(timeField);
        this.add(timeField);
        myQuiz.begin();

        randomGenerator = new Random();
        x = randomGenerator.nextInt(12);
        y = randomGenerator.nextInt(12);        

        messageLabel = new JLabel("What is the result of " + x + " * " + y);
        this.add(messageLabel);

        answerField = new JTextField(5);
        answerField.addActionListener(this);
        this.add(answerField);

        correctLabel = new JLabel("You gave : " + correct +  " correct answers");
        this.add(correctLabel);

        totalLabel = new JLabel("Of total: " + total + " questions");
        this.add(totalLabel);       
    }

    public void actionPerformed(ActionEvent ae)
    {
        if(ae.getSource() == answerField)
        {
            randomGenerator = new Random();
            x = randomGenerator.nextInt(12);
            y = randomGenerator.nextInt(12);
            messageLabel.setText("What is the result of " + x + " * " + y); 
            System.out.println("Expected: " + result);
            result = x * y;
            String s = answerField.getText();
            answerField.setText("");
            check = Integer.parseInt(s);


            System.out.println("Your answer: " + check);

            if(result == check)
            {
                correct++;
                total++;
            }
            else
            {
                total++;
            }

            correctLabel.setText("You gave : " + correct +  " correct answers");
            totalLabel.setText("Of total: " + total + " questions");


        }

    }
}

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Проблема в том, что вы сбрасываете значения x и y после того, как пользователь вводит ответ на вопрос.Вот почему ответ всегда неправильный, поэтому увеличивается только общее количество.Вы должны делать:

x = randomGenerator.nextInt(12);
y = randomGenerator.nextInt(12);

, когда просите пользователя дать ответ.Когда пользователь вводит ответ, вы выполняете проверку предоставленного ответа и текущих значений x и y.Вы восстанавливаете x и y только в новом сеансе викторины, но не во время проверки.

2 голосов
/ 11 марта 2012

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

Создайте новые случайные факторы:

        randomGenerator = new Random();
        x = randomGenerator.nextInt(12);
        y = randomGenerator.nextInt(12);

Измените вопрос и сгенерируйте новый result

        messageLabel.setText("What is the result of " + x + " * " + y); 
        System.out.println("Expected: " + result);
        result = x * y;

Получить текст текущего введенного значения :

        String s = answerField.getText();
        answerField.setText("");
        check = Integer.parseInt(s);


        System.out.println("Your answer: " + check);

Проверить результат уже введенного значения по вновь созданному вопросу :

        if(result == check)
        {
            correct++;
            total++;
        }

Примечание:

if(result == check)
{
    correct++;
    total++;
}
else
{
    total++;
}

может быть выражено как

total++;
if (result == check)
    correct++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...