我在使用 ActionListener 或按下按钮更新字符串时遇到问题。让我展示一段代码摘要:
public class GUI extends JFrame {
//Importing some data from the main Class
public static String ques = Main.getQues();
public static String QuesExtra = Main.getQuesExtra();
//More GUI Stuff here
JButton btnSubmit = new JButton("Submit!");
btnSubmit.setBounds(557, 295, 117, 42);
contentPane.add(btnSubmit);
textField1 = new JTextField();
textField1.setFont(new Font("Tahoma", Font.PLAIN, 25));
textField1.setBounds(214, 301, 256, 36);
contentPane.add(textField1);
textField1.setColumns(10);
textField2 = new JTextField();
textField2.setFont(new Font("Tahoma", Font.PLAIN, 25));
textField2.setColumns(10);
textField2.setBounds(480, 281, 55, 36);
contentPane.add(textField2);
lblQuestion = new JLabel(ques, SwingConstants.CENTER);
lblQuestion.setFont(new Font("Tahoma", Font.PLAIN, 50));
lblQuestion.setBounds(10, 30, 664, 72);
contentPane.add(lblQuestion);
SubmitHandlerClass submithandler = new SubmitHandlerClass();
btnSubmit.addActionListener(submithandler);
}
private class SubmitHandlerClass implements ActionListener {
public void actionPerformed(ActionEvent event) {
answer1 = textField1.getText();
answer2 = textField2.getText();
if (ques.equals("a")){
if (answer1.equals("a")) {
check = "Correct";
} else {
check = "Wrong";
}
} else if(ques.equals("b")){
if (answer1.equals("b")) {
check = "Correct";
} else {
check = "Wrong";
}
}
}
JOptionPane.showMessageDialog(null, ("Your Answer is " + check + "!"));
new Main().random();
//I'm guessing the problem Lies here
String ques = Main.getQues();
String QuesExtra = Main.getQuesExtra();
lblQuestion.setText(ques);
lblQuesextra.setText(QuesExtra);
}
}
}
首先,让我解释一下主类。主类包括 java.util.Random,它将为 GUI 类提供随机问题给用户。然后将问题转移到 GUI 类以更新 JLabel。点击“提交”按钮,它会检查答案是否正确。此外,它将帮助生成一个新问题,然后 setText 将更新 JLabel。
一切正常,除了问题似乎没有更新,尽管 JLabel 发生了变化。这很难解释,所以我将其保留为点形式。
- JLabel 显示问题“a”
- 用户输入“a”作为答案并提交
- 因此,出现一个 MessageDialog 说答案是正确的
- 随机方法会为用户选择第二个问题
- JLabel 获取更新为新问题“b”
如果用户输入“b”(应该是正确的)
- MessageDialog 会说答案是错误的。
如果用户输入“a”(这应该是错误的)
- MessageDialog 会说答案是正确的。
由此我可以得出结论,由于某种原因,字符串实际上并没有改变,因此 if else 语句仍将其视为“a”而不是“b”,并针对错误的问题检查答案。
我不太确定我的理解是否正确,但经过一些尝试和错误后,我发现这就是问题所在。我还尝试通过替换其他代码来强制更改字符串,ques = "b"
但它仍然不起作用。
这是我现在可以详细说明的最好的方法,但是如果您仍然不清楚,请随时提出任何问题,以便我改进我的问题。另外,提前感谢您查看希望提出解决问题的解决方案。