Java setText到Jlabel的函数
我正在尝试使用一个函数Java setText到Jlabel的函数,java,swing,jbutton,actionlistener,jlabel,Java,Swing,Jbutton,Actionlistener,Jlabel,我正在尝试使用一个函数settext到JLabel 由于某些原因,checkResults函数不起作用。我仍然会收到错误。我有两门课 驱动程序和数学问题 驾驶员等级 import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.*; import java.util.Scanner; import javax.swing.*; public class Driver extends MathProb
settext
到JLabel
由于某些原因,checkResults函数不起作用。我仍然会收到错误。我有两门课
驱动程序
和数学问题
驾驶员等级
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
数学问题课
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);
}
}
我认为jl.setText需要字符串和字符串值,而不是传递整数 也许对你来说
jl.setText(answers.checkResult(Integer.toString(expected)));
改变
public String checkResult(String answer) {
return Integer.toString(expected);
}
虽然我不能完全确定你在这里想要实现什么好的,这
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);
到
预计这个问题的解决方案需要
@Override
public String toString(){
return Integer.toString(expected);
}
然后需要像这样设置为JLabel
jl.setText(problems.toString());
正如我对你上一个问题的评论:
您需要从侦听器中的第一个条件中删除“problems.run()”,否则您将得到下一个问题的“答案”,依此类推。此外,考虑在DIVE()方法中使用双倍数,通过使用INT,您将丢失小数。也许您应该告诉我们,Meo Cuffice结果INT的错误不适用于这行JL.SETTEX.[(回答。您似乎没有不接受参数的checkResult()方法。您确实有一个checkResult方法,它接受一个int。是的,它接受一个int。那么我该如何将该行写入Integer.toString???嗯。。。可能会像方法所期望的那样将int传递给该方法。否则,该方法将如何神奇地从无到有地返回一个字符串呢?我已经编辑了它,至少对您有用。请提供您对checkResult代码的意图。我正在尝试将结果中的int(这是数学问题的答案)发布到jlabelI不知道为什么有人否决了您。我投了赞成票。谢谢你的帮助。这修复了错误,但仍然不起作用。程序在第一次点击后就锁定了。真的,我只想把答案贴出来。用户无法输入asnswrr。我只想在下次单击abswer时问一个问题。我需要做什么更改才能得到预期出现在jlabel中的答案?好的,如果你想要答案,你需要创建一个名为getAnswer的数学问题方法,我将更新real quickjl.setText仍有错误,建议更改为setToolType b1.addActionListener(新ActionListener(){public void actionPerformed(ActionEvent e){if(b1.getText().equals(“单击获取答案”){int预期=问题。getAnswer();jl.setText(problems.getAnswer();String b=“下一个问题”b1.setText(b);}else{
jl.setText(problems.toString());