我有一个半完整的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);
}
答案 0 :(得分:1)
这就是你现在正在做的事情:
此处缺少某些内容 - 您未在此侦听器方法中保留计算器的状态(先前输入的输入)。
此代码在操作之前保存输入的状态,将其追加到最后。
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);
}