Java计算器不允许单个输入

时间:2015-02-06 22:09:26

标签: java swing calculator

我有一个半完整的java计算器,它运行不正常。每当我点击“1”按钮,它就不允许我添加更多。它允许我单击按钮,但它只显示一个“1”,而不是允许我多次击中它并打印出单数。代码在NetBeans中完成,并使用设计部分。我的代码链接如下:http://pastebin.com/vq9fSA2b

我真的很感激得到一些帮助,因为它在我的设计中创造了一个块。错误发生在第209行,在btn1下。 我还需要在每个部分下添加相同的标准代码部分,但如果没有正确的代码,我就无法这样做。

监听器方法是:

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

4 个答案:

答案 0 :(得分:1)

这就是你现在正在做的事情:

  1. 获取按钮上显示的文字(大概是" 1")
  2. 将计算器的状态设置为该文本。
  3. 此处缺少某些内容 - 您未在此侦听器方法中保留计算器的状态(先前输入的输入)。

    此代码在操作之前保存输入的状态,将其追加到最后。

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

    编辑:修复了演员周围的括号。

答案 1 :(得分:1)

在第210行,你有:

txtDisplay.setText(btnOneTxt);

这样做是将JTextField txtDisplay的整个内容设置为btnOneTxt。因此,每次单击该按钮,都会使用btnOneTxt替换txtDisplay中的内容。

您要做的是使用按钮文本附加到文本字段中已有的内容,例如

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

然而,请注意,您的GUI代码非常混乱。我不确定你写了多少或者给你多少提示分配,但是你可以考虑将按钮存储在一个数组中,这样你就可以用循环在所有这些按钮上执行相同的功能。

答案 2 :(得分: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(即连接它)然后重新应用{{ 1}}回到String,它会将Document直接注入基础String,这通常会更有效率

答案 3 :(得分:0)

尽管帖子不太清楚,但我想你在点击新按钮时试图编写数字条目。

您应该提取当前txtDisplay内容,然后将新的关键文字附加到该内容,并且不会在每次点击该按钮时将其删除:

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