2015-02-06 27 views
-1

我有一個半完整的java計算器,它工作不正常。每當我點擊「1」按鈕,它不允許我添加更多的。它允許我點擊按鈕,但它只顯示一個「1」,而不是允許我多次點擊並打印出單數。代碼是在NetBeans中完成的,並且正在使用設計部分。我的代碼鏈接如下:http://pastebin.com/vq9fSA2bJava計算器不允許單個輸入

我會很感激得到一些幫助,這爲它創造了在我設計的模塊。該錯誤位於btn1下的第209行。 我還需要根據每個部分添加的代碼相同的標準部分,但不具有正確的代碼就擺在我不能這樣做

偵聽方法是這樣的:

private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {          
    String btnOneText = btn1.getText(); 
    txtDisplay.setText(btnOneText); 
} 
+0

你只是用btnOneText更換,無論什麼是你DISPLA txtDisplay你已經?你應該積累的結果,例如讀取值和追加btnOneText – Joey 2015-02-06 22:21:51

+0

1)另請參閱此[計算器示例](http://stackoverflow.com/a/7441804/418556)。它使用'ScriptEngine'來評估文本字段中的表達式。 2)爲了更快地獲得更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(簡稱,自包含,正確的例子)。我的意思是在這裏發佈,而不是許多人不會遵循的鏈接。 – 2015-02-06 23:18:59

回答

1

線210你有:

txtDisplay.setText(btnOneTxt); 

,做什麼設置全部內容JTextField的txtDisplay到btnOneTxt的。因此,每次單擊按鈕時,都會用btnOneTxt替換txtDisplay中的已有內容。

你想要做什麼是追加到什麼已經是在與按鈕文本的文本字段,這樣

txtDisplay.setText(txtDisplay.getText() + btnOneText); 

正如一個側面說明但是,您的GUI代碼是非常的混亂。我不確定你寫了多少或給了多少提示,但可以考慮將按鈕存儲在一個數組中,以便您可以在循環中對其執行相同的功能。

+0

我自己並沒有編寫源代碼,它只是在編輯實際面板時由NetBeans自動完成。 – NebulaCoding 2015-02-07 01:12:12

1

這是什麼你正在做的現在:

  1. 獲取按鈕上顯示的文字(大概是「1」)
  2. 設置計算器,文本的狀態。

這裏缺少一些東西 - 你沒有在這個監聽器方法中保存計算器的狀態(之前輸入的輸入)。

此代碼操縱它,它附加到結束之前保存輸入的狀態。

private void btnActionPerformed(java.awt.event.ActionEvent evt) { 
    String inputState = txtDisplay.getText(); 
    txtDisplay.setText(inputState + ((JButton) evt.getSource()).getText()); 
} 

編輯:修正了演員陣的括號。

0

即使職位不是很清楚,但我想你想撰寫的條目數爲新的按鈕被點擊。

你應該拉動當前txtDisplay內容,那麼新的密鑰文本附加到它,每個按鈕被點擊時無法抹去它:

private void btn1ActionPerformed(java.awt.event.ActionEvent evt) 
{          
    String btnOneText = btn1.getText(); 
    String oldTextEntry = txtDisplay.getText(); 
    txtDisplay.setText(oldTextEntry + btnOneText); 
} 
+0

我試圖讓它更清晰lol – NebulaCoding 2015-02-07 01:16:38

1

setText做到了這一點,它會將您提供的文本框中的文字,放棄什麼都以前有

有多種方式,你可以添加文字,而不是...

你可以...

做簡單String拼接......

String btnOneText = btn1.getText(); 
btnOneText = txtDisplay.getText() + btnOneText; 
txtDisplay.setText(btnOneText); 

你可以...

使用StringBuilder每一次按下其中一個按鈕添加文本壓...

private StringBuilder displayText = new StringBuilder(128); 
//... 
displayText.append(btnText); 
txtDisplay.setText(displayText); 

你可以...

直接插入文字底層Document本身......

try { 
    Document doc = txtDisplay.getDocument(); 
    doc.insertString(doc.getLength(), btnText, null); 
} catch (BadLocationException exp) { 
    exp.printStackTrace(); 
} 

這種方法不需要你到下面Document的數值解壓縮到一個String,更新String(即串連IT)然後重新應用StringDocument,它注入了一個String直入底層Document這是通常更有效