ActionListener を使用して String を更新する際、またはボタンを押す際に問題が発生しています。コードの要約部分を示しましょう。
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);
}
}
}
まず、メインクラスについて簡単に説明します。メイン クラスには、GUI クラスにランダムな質問をユーザーに提供する java.util.Random が含まれます。次に、質問が GUI クラスに転送され、JLabel が更新されます。「送信」ボタンをクリックすると、回答が正しいかどうかがチェックされます。さらに、新しい質問を生成するのに役立ち、setText が JLabel を更新します。
JLabelが変更されても質問が更新されないように見えることを除いて、すべてが機能します。説明するのはかなり難しいので、ポイント形式のままにします。
- JLabel 質問「a」を表示します
- ユーザーは回答として「a」を入力して送信します
- したがって、答えが正しいことを示す MessageDialog が表示されます。
- ランダムな方法では、ユーザーに対して 2 番目の質問が選択されます。
- JLabel は新しい質問 "b" に更新されます
ユーザーが「b」を入力した場合 (どちらが正しいはずです)
- MessageDialog は、答えが間違っていると言うでしょう。
ユーザーが「a」を入力した場合 (これは間違っているはずです)
- MessageDialog は、答えが正しいと言うでしょう。
このことから、何らかの理由で文字列が実際には変更されないため、if else ステートメントはそれを「b」ではなく「a」と見なし、間違った質問に対する回答をチェックすると結論付けることができます。
私の理解が正しいかどうかはよくわかりませんが、試行錯誤の末、それが問題であることがわかりました。また、他のコードを置き換えて文字列を強制的に変更しようとしましたが、ques = "b"
それでも機能しません。
今のところ詳しく説明できるのはこれだけですが、まだ不明な点がある場合は、お気軽に質問してください。質問を改善できます。また、うまくいけば問題を解決するための解決策を考え出すために、ご覧いただきありがとうございます。