Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java计算器不允许单个输入_Java_Swing_Calculator - Fatal编程技术网

Java计算器不允许单个输入

Java计算器不允许单个输入,java,swing,calculator,Java,Swing,Calculator,我有一个半完整的java计算器,它不能正常工作。每当我点击“1”按钮时,它不允许我添加更多的。它允许我点击按钮,但它只显示一个“1”,而不允许我点击多次并打印出单数。代码是在NetBeans中完成的,并且正在使用design部分。指向我的代码的链接如下: 我真的很想得到一些帮助,因为这已经在我的设计中创造了一个块。错误位于btn1下的第209行。 我还需要在每个部分下添加相同的标准代码部分,但是如果没有正确的代码,我就无法这样做 侦听器方法如下所示: private void btn1Actio

我有一个半完整的java计算器,它不能正常工作。每当我点击“1”按钮时,它不允许我添加更多的。它允许我点击按钮,但它只显示一个“1”,而不允许我点击多次并打印出单数。代码是在NetBeans中完成的,并且正在使用design部分。指向我的代码的链接如下:

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

侦听器方法如下所示:

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

这就是您现在正在做的:

  • 获取按钮上显示的文本(推测为“1”)
  • 将计算器的状态设置为该文本 这里缺少一些东西-您没有在这个侦听器方法中保留计算器的状态(以前输入的输入)

    此代码在操作输入之前保存输入的状态,并将其附加到末尾

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

    编辑:修复了铸件周围的括号

    虽然帖子不太清楚,但我想你是在点击新的按钮时尝试撰写数字条目

    您应该拖动当前的
    txtDisplay
    内容,然后将新的键文本附加到其中,而不是每次单击按钮时将其删除:

    private void btn1ActionPerformed(java.awt.event.ActionEvent evt)
    {                                    
        String btnOneText = btn1.getText();
        String oldTextEntry = txtDisplay.getText();
        txtDisplay.setText(oldTextEntry + btnOneText);
    } 
    
    在第210行,您有:

    txtDisplay.setText(btnOneTxt);
    
    这样做的目的是将JTextField txtDisplay的全部内容设置为btnOneTxt。因此,每次单击按钮时,都会将txtDisplay中已有的内容替换为btnOneTxt

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

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

    不过,作为旁注,您的GUI代码非常混乱。我不知道你写了多少,或者给了你多少来提示任务,但是你可以考虑把这些按钮存储在一个数组中,这样你就可以用一个循环在所有的函数上执行相同的功能。

    <代码> SETTEX/<代码>就是这样,它设置了你提供给字段的文本,丢弃了以前在那里存在的

    您可以通过多种方式附加文本

    你可以。。。 执行简单的
    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);
    
    你可以。。。 将文本直接插入基础
    文档
    本身

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

    这种方法不需要您将基础
    文档的值提取到
    字符串
    ,更新
    字符串
    (即连接它),然后将
    字符串重新应用到
    文档
    ,它将一个
    字符串
    直接注入底层
    文档
    ,通常效率更高

    您只是简单地将txtDisplay替换为btnOneText,而不管您的显示内容是什么?您应该通过读取值并附加btnOneText1)来累积结果。另请参见此。它使用
    ScriptEngine
    计算文本字段中的表达式。2) 为了更快地获得更好的帮助,可以发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。我的意思是在这里发布,而不是在一个很多人都不会关注的链接上。我不是自己编写源代码的,它只是由NetBeans在编辑实际面板时自动完成的。我试图让它更清楚,哈哈