【问题标题】:Updating a JTextArea dynamically and reading specific text from it动态更新 JTextArea 并从中读取特定文本
【发布时间】:2012-05-13 13:24:11
【问题描述】:

我正在构建一个带有一个 JTextArea 的 ATM 模拟器,它将显示与用户的所有交互。我希望用户输入 pin 并在欢迎消息下方的 JtextArea 星号中显示他。在我的代码中将它们作为实数读取时如何显示星号,以便我可以验证我的用户?我还希望 JTextArea 在用户从一个步骤到下一个步骤时使用不同的文本动态更新。例如,它会覆盖用于输入 pin 的文本以及关于撤回等的文本。它将继续这样做,用户将看到屏幕更新相关信息。欢迎任何有关我如何操作 JtextArea 的资源或帮助,或者如果有人可以提出更好的方法来实现这一点。

【问题讨论】:

  • 您对所有交互都使用单个 JTextArea 完成的想法有多大关系?
  • @Greg 我愿意接受有关实现此目标的更好方法的建议。

标签: java swing jtextarea


【解决方案1】:

如果您尝试将 JTextArea 当作一个控制台来使用,它与用户逐行交互,并且不显示 PIN 号,它可能会有点棘手。一种可能的解决方案是在 JTextArea 的 Document 上使用 DocumentFilter(首先转换为 PlainDocument)并传递所有输入的文本除非您的程序处于 PIN 获取模式(也许您将有一个布尔变量用于this),在这种情况下,您可以将输入的文本保存到程序本身,但仅通过 DocumentFilter 显示“*”。这可能有点矫枉过正,但它可以工作。

【讨论】:

    【解决方案2】:

    我认为JPasswordField 可能是您需要的实例。

    对于放置星号,

    passwordField.setEchoChar('*');
    

    为了恢复 PIN:

    char[] pin = passwordField.getPassword();
    

    使用这种方法,您需要一些其他组件,例如 JLabel 用于向用户显示信息,欢迎消息。

    【讨论】:

    • 如果他不像控制台那样使用 JTextArea,这是一个很好且可行的解决方案。 1+
    • 这并没有解决“显示与用户的所有交互”方面 - 但正如 Hovercraft Full Of Eels 所说,使用 JTextArea 来做到这一点是“棘手的”。
    • @PaulVargas 我将如何操作单个 jframe 中的不同元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多