2015-02-06 28 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这是通常更有效