使用函数将setText添加到Jlabel

时间:2014-04-17 01:49:33

标签: java swing jbutton actionlistener jlabel

我正在尝试使用函数settextJLabel

checkResults函数因某些原因无法正常工作我仍然会收到错误。我有2个班级

DriverMathProblems

驱动程序类

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);
     }

}

4 个答案:

答案 0 :(得分:1)

正如我对你上一个问题的评论: 你需要删除" problems.run()"从你在听众的第一个条件,否则"答案"你得到的将是下一个问题,依此类推。另外,考虑在divide()方法中使用双精度数,通过使用整数,您将丢失小数。

答案 1 :(得分:0)

我认为jl.setText需要一个字符串值而不是传递整数。

或许在你的情况下

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

并更改

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

虽然我不完全确定你想要在这里实现什么

答案 2 :(得分:0)

好的,这个

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

应该是这样的:

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

这个:

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

应该是这样的:

   public int getAnswer() {
         return expected;
   }

现在这里是真正的问题

你不应该这样做:

String s = in.nextLine();

您应该在表单中添加一个文本框以输入值,这就是它冻结您的原因。扫描仪用于命令行输入输出

改变这个:

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

int expected = problems.getAnswer();

答案 3 :(得分:0)

预计此问题的解决方案需要

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

然后它需要像这样设置为JLabel,

jl.setText(problems.toString());