如何从jtextarea中清除文本,然后继续追加其他文本(使用相同的按钮)?

问题描述 投票:2回答:1

我正在尝试开发一个简单的计算器,当用户继续点击数字时,它们会出现在textarea上。如果他们单击运算符(“+”,“ - ”,“*”等),textarea上的数字以及他们单击的运算符,它们将分别保存在数字和运算符变量上。当用户单击操作符后单击另一个数字时,它应该删除jtextarea上的数字,并在其上写上新数字,这样我就可以将它存储在第二个数字变量上,最后用两个数字进行操作数字。

我面临的问题是,当用户第二次点击一个数字时,即点击操作符后,我找不到清除textarea上的内容的方法,并且还要附加要点击的数字。如果我放一个代码来清除textarea并附加一个数字,它只是清除前一个数字,并且只写一个数字,例如,如果我想写“857”它只能写“8”,如果我单击“5”,“8”将被清除并写入“5”。

我理解并解释为什么它不起作用,因为每次用户点击数字时都会发生清除和附加代码。所以我想知道是否有办法,如果有可能:清除文本,然后继续附加文本,即第二次用户点击一个数字,它应该附加数字屏幕,不清楚。

java swing append actionlistener jtextarea
1个回答
0
投票

我想用程序设计中的两个概念来解决这个问题的答案:第一个是设计依赖于外部特征,第二个是状态机。

我在这里做了一些猜测和假设,但是根据你的描述,你似乎已经固定在文本区域的“附加”功能上,现在正在编程,以便你可以在几种情况下使用它:添加一个数字到显示屏上的数字,并在显示屏上添加一个新数字('追加'到空显示屏)。

这是textarea的一个很好的功能,它可能对你的程序有用,但你不必在这里使用它。

但是你解决了这个问题,你有一个'状态'来保存 - 当用户按下一个键时,程序所做的事情取决于它的状态。您必须能够辨别它所处的状态,以便您可以正确编程对按键的响应。

所以让我建议一下:有一个变量可以在显示中存储你想要的东西 - 全部。当有人按下某个键时,以任何方式辨别您的状态,并使用显示中的内容更新该变量。完成处理后,将文本区域设置为该变量的值。

请注意,这允许程序流 - 接收输入,处理,显示 - 在所有情况下都是相同的。程序的任何部分都不得弄清楚是否“清除”显示器。因此,您所节省的州的复杂程度较低。

如果您的状态是“为第一个操作数累加数字”,并且按下了一个数字,则将所按下的数字附加到正在显示的字符串。

如果您的状态是“正在累积...”并且按下了操作员,请附加操作员。

如果您的状态是“仅按下操作员”并按下另一个数字,请将变量设置为按下的数字。

等等。

这些可能是也可能不是正确的使用状态,我在这里只是简单的例子。但是以类似的方式完成,我认为你会发现你的程序更容易编写和理解 - 你删除了'append'功能和程序状态之间相互作用的代码,这使你的代码比它更复杂需要。

我发现,对于程序员(包括我自己)而言,很常见的是附加到我们随后解决的一些实现 - 实际上,我们总是在某种程度上解决实现,这就是我们的工作。但有时候如果我们退后一步,我们可以看到我们正在做更多的编程来解决我们可以消除的一些实现细节,通过消除它我们可以简化我们的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.