Question

I am trying to settext to JLabel with a function.

The checkResults function is not working for some reason I still get errors. I have 2 classes

Driver and MathProblems

Driver Class

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.*;
import java.util.Scanner;

import javax.swing.*;

public class Driver extends MathProblems {

    MathProblems answers = new MathProblems();
    MathProblems problems = new MathProblems();
    private static final Scanner in = new Scanner(System.in);

    String s = "Welcome Students!";
    String b = "Start!";
    private JFrame f;
    private JPanel p;

    JFrame frame = new JFrame();

    JButton b1 = new JButton(b);

    JLabel jl = new JLabel(s);

    int i;

    public Driver () {      
        gui();  
    }

    public void gui() { 
        f = new JFrame("Flash Card Program");       
        p = new JPanel();   
        f.setLayout( new GridLayout( 2, 1 ) );
        f.add(jl);
        f.add(p);
        p.setLayout( new GridLayout( 2, 1 ) );
        p.add(b1);

        jl.setHorizontalAlignment(JLabel.CENTER);

        // pack the frame for better cross platform support
        f.pack();
        // Make it visible
        f.setVisible(true);
        f.setSize(560,400); // default size is 0,0
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                if(b1.getText().equals("Click For Answer"))
                {
                    String s = in.nextLine();
                    int expected = Integer.parseInt(s);
                    answers.run();
                    jl.setText.(answers.checkResult());
                    String b = "Next Question";
                    b1.setText(b);
                }
                else
                {
                    problems.run();
                    jl.setText(problems.getQuestion());
                    String b = "Click For Answer";
                    b1.setText(b);

                }
          }
});
    }


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
           public void run() {
                new Driver();
           }
        });
    } // End main Method

} // End class Driver

MathProblems Class

import java.util.Random;

public class MathProblems {
     private static final int MAX_NUMBER = 10;
     private static final Random random = new Random();

     private int expected = 0;
     private String question = "";

     public void run() {
         final int a = random.nextInt(MAX_NUMBER);
         final int b = random.nextInt(MAX_NUMBER);

         final int type = random.nextInt(4);

         switch (type) {
             case 0: 
                 add(a, b);
                 break;
             case 1: 
                subtract(a, b);
                break;
             case 2:
                multiply(a, b);
                break;
             case 3:
                 divide(a, b);
                 break;
         }
     }

     private void add(final int a, final int b) {
         expected = a + b;

         askQuestion(a + " + " + b + " = ");
     }

     private void subtract(final int a, final int b) {
         expected = a - b;

         askQuestion(a + " - " + b + " = ");
     }

     private void multiply(final int a, final int b) {
         expected = a * b;

         askQuestion(a + " * " + b + " = ");
     }

     private void divide(final int a, final int b) {
         expected = a / b;

         askQuestion(a + " / " + b + " = ");
     }

     private  void askQuestion(final String question) {
         this.question = question;
     }  

     public String getQuestion() {
         return question;
     }

     public String checkResult(final int answer) {
         return Integer.toString(expected);
     }

}
Was it helpful?

Solution

As I commented on your previous question: You need to remove "problems.run()" from your first condition in the listener, otherwise the "answer" you get will be for the next question, and so on. Also, consider using doubles in your divide() method, by using ints you will lose the decimals.

OTHER TIPS

I think jl.setText requires a string a string value instead of passing an integer.

In your case perhaps

jl.setText(answers.checkResult(Integer.toString(expected)));

and change

public String checkResult(String answer) {
     return Integer.toString(expected);
 }

Although Im not entirely sure what you are trying to achieve here

Okay, this

jl.setText.(answers.checkResult());

should be this:

jl.setText(answers.checkResult(expected));

this:

public String checkResult(final int answer) {
         return Integer.toString(expected);
     }

should be something like this:

   public int getAnswer() {
         return expected;
   }

NOW here's the REAL issue

You shouldn't be doing this:

String s = in.nextLine();

You should add a textbox to the form to enter the value, that's why it's freezing on you. Scanner is used for command line input output

Change this:

String s = in.nextLine();
int expected = Integer.parseInt(s);

to

int expected = problems.getAnswer();

The solution to this problem is expected needs to be

 @Override
 public String toString(){
 return Integer.toString(expected);
 }

Then it needs to be set to JLabel like this,

jl.setText(problems.toString());
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top