【问题标题】:How to clear text from a jtextarea, and then keep appending other text (with the same button)?如何从 jtextarea 中清除文本,然后继续附加其他文本(使用相同的按钮)?
【发布时间】:2019-07-18 00:30:07
【问题描述】:

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

我面临的问题是,当用户第二次单击一个数字时,即单击运算符后,我找不到清除文本区域上的内容的方法,并且还继续附加被点击的数字。如果我输入一个代码来清除文本区域并附加一个数字,它所做的就是清除前一个数字,并写 ONLY ONE NUMBER ,例如,如果我想写“857”它只能写“8”,如果我点击“5”,“8”会被清除,写“5”。

我理解并明白为什么它不起作用,因为每次用户单击数字时都会发生清除代码和附加代码。所以我想知道是否有办法解决这个问题,以及是否有可能:清除文本,然后继续附加文本,即用户第二次单击数字时,它应该将数字附加到屏幕,不清除它。

【问题讨论】:

  • 在处理操作员按钮的按下时,您必须设置提醒,接受下一个数字时应清除显示,是吗?那么,您是否记得在输入下一个数字后清除该提醒
  • 请向我们展示您的代码。
  • @KevinAnderson。是的,这就是问题所在,我忘了正确使用该提醒。感谢您的帮助!
  • @PrasadKarunagoda 感谢您的关注。在社区的帮助下,我已经发现主要问题是缺少允许程序相应运行的状态变量。干杯!

标签: java swing append actionlistener jtextarea


【解决方案1】:

我想用程序设计中的两个概念来回答这个问题:第一个是对外部功能的设计依赖,第二个是状态机。

我在这里做了一些猜测和假设,但从您的描述看来,您已经固定在文本区域的“附加”功能上,并且现在正在编程,以便您可以在几种情况下使用它:添加将数字添加到显示屏上的数字,然后在显示屏中添加一个新数字(“附加”到空显示屏)。

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

无论你如何解决这个问题,你都需要保存一个“状态”——当用户按下一个键时,程序所做的事情取决于它的状态。您必须能够辨别它处于什么状态,以便正确编程对按键的响应。

所以让我建议这个:有一个变量来存储您想要的显示内容——所有内容。当有人按下一个键时,以任何方式识别您的状态,并使用显示中应该显示的内容更新该变量。完成处理后,将文本区域设置为该变量的值。

请注意,这允许程序流程——接收输入、处理、显示——在所有情况下都是相同的。程序的任何部分都不必确定是否“清除”显示。因此,您要保存的状态的复杂性较低。

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

如果您的状态是“累积...”并且按下了某个运算符,请附加该运算符。

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

等等。

这些可能是也可能不是要使用的正确状态,我只是将它们作为简单的示例。但是以类似的方式完成,我认为您会发现您的程序更易于编写和理解——您删除了在“附加”功能和程序状态之间交互的代码,这使您的代码比它更复杂需要。

我发现,对于程序员(包括我自己)来说,依附于我们随后解决的某些实现是很常见的——事实上,我们总是在某种程度上解决实现,这就是我们所做的。但有时如果我们退后一步,我们会发现我们正在围绕一些我们可以消除的实现细节进行更多的编程,通过消除它我们可以简化我们的解决方案。

【讨论】:

  • 嗯,你绝对是对的。不知何故,我过于依赖“append()”方法,以至于我忘记了我可以在这里使用另一种方法,事实上,事实证明它要容易得多。除此之外,我认为解决我的问题的要点肯定是需要一个状态变量,它允许程序相应地流动。谢谢你的建议和时间。它真的很有帮助。亲切的问候!
  • 很高兴它有帮助!在 StackOverflow 上,如果一个答案有帮助,通常会对其进行投票;如果答案确实回答了您的问题,则习惯上也将其标记为答案。这有助于其他人寻找自己问题的答案,并向人们分配声誉积分等。欢迎观看永无止境的节目......
  • 已经做到了。感谢您的接待。我将期待提供帮助、提出问题并根据需要做出贡献。很快再见;)
  • 你说你做到了,但答案仍然没有标记为“答案”。
  • 我不知道是不是因为我是新手,还没有什么大名声(13),但是我已经点击了勾号,现在它是绿色的(或者可能我的方法不对)。我也尝试过投票,但每当我尝试时,他们都会说:“声望低于 15 的人的投票会被记录下来,但不要更改公开显示的帖子得分。”。也许我的做法不对。我能做些什么来扭转这种局面。我会很乐意做的。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
相关资源
最近更新 更多