2013-10-24 51 views
0

我在用ActionListener更新字符串或按下按鈕時遇到問題。讓我展示一段代碼的摘要:通過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」作爲答案,並將其提交
  • 因此,MessageDialog似乎說的答案是正確的
  • 隨機方法會選擇第二用戶問題
  • 的JLabel獲取的經更新的新問題「b」

如果用戶輸入「b」(這應該是正確的)

  • MessageDialog會說答案是錯誤的。

如果用戶輸入 「A」(這是應該不會錯)

  • MessageDialog會說,答案是正確的。

由此我可以得出結論,由於某種原因,字符串實際上並沒有改變因此如果else語句看到它仍然爲「A」,而不是「B」和檢查對錯誤的問題的答案。

我不太確定,如果我的理解是正確的,但經過一些嘗試和錯誤後,我發現這是問題所在。我也嘗試通過用ques = "b"替換其他代碼來強制更改字符串,但它仍然不起作用。

這是我現在可以闡述的最好的,但如果你仍然不清楚隨意問任何問題,所以我可以改善我的問題。此外,預先感謝有望找出解決方案來解決問題。

+1

考慮發佈演示您的問題的最小代碼示例,[SSCCE](http://sscce.org)。這將允許我們運行你的代碼並修改它,甚至可以糾正它。請在回覆之前閱讀鏈接,因爲它提供了關於SSCCE要求的許多重要細節。此外,您的設計具有糟糕的代碼味道,並且會過度使用靜態字段。 –

+1

此外,您不會想要硬編碼您的正確答案或問題。這應該是數據的一部分,而不是代碼。 –

回答

-1

btnSubmit.addActionListener(submithandler);

這是什麼聲明?