Java 计算器不允许单一输入
Java calculator not allowing for single inputs
我有一个半完整的 java 计算器,它不能正常工作。每当我点击“1”按钮时,它不允许我添加更多。它允许我点击按钮,但它只显示一个“1”,而不是让我点击它多次并打印出单数。代码是在 NetBeans 中完成的,并且使用了设计部分。 link 我的代码如下:http://pastebin.com/vq9fSA2b。
我真的很感激能得到一些帮助,因为它在我的设计中造成了障碍。错误在第 209 行,在 btn1 下。
我还需要在每个部分下添加相同的标准代码部分,但如果没有输入正确的代码,我无法这样做。
监听方法是这样的:
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());
}
编辑:修复了演员表周围的括号。
尽管 post 不是很清楚,但我想您正在尝试在单击新按钮时编写数字条目。
您应该拉取当前的 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 代码真的很乱。我不确定你写了多少或给了你多少来提示作业,但你可以考虑将按钮存储在一个数组中,这样你就可以在所有按钮上循环执行相同的功能。
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
(即连接它)然后重新应用 String
回到 Document
,它将 String
直接注入底层 Document
,这通常更有效
我有一个半完整的 java 计算器,它不能正常工作。每当我点击“1”按钮时,它不允许我添加更多。它允许我点击按钮,但它只显示一个“1”,而不是让我点击它多次并打印出单数。代码是在 NetBeans 中完成的,并且使用了设计部分。 link 我的代码如下:http://pastebin.com/vq9fSA2b。
我真的很感激能得到一些帮助,因为它在我的设计中造成了障碍。错误在第 209 行,在 btn1 下。 我还需要在每个部分下添加相同的标准代码部分,但如果没有输入正确的代码,我无法这样做。
监听方法是这样的:
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());
}
编辑:修复了演员表周围的括号。
尽管 post 不是很清楚,但我想您正在尝试在单击新按钮时编写数字条目。
您应该拉取当前的 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 代码真的很乱。我不确定你写了多少或给了你多少来提示作业,但你可以考虑将按钮存储在一个数组中,这样你就可以在所有按钮上循环执行相同的功能。
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
(即连接它)然后重新应用 String
回到 Document
,它将 String
直接注入底层 Document
,这通常更有效