2017-07-19 28 views

回答

2

我认为最好理解文本组件(它是一个JTextField的一部分)是如何工作的以及它们是由什么组成的。

为了削减长话短说,我会从Java文档的一些提取解释:

从以上说明显而易见的是,预计有下面步骤时,用户与交互TextComponent中发生:

  1. 用户与TextComponent中相互作用。
  2. Choice上告知它的用户 互动
  3. 底层文档决定如何处理与用户的交互 /输入做的基础文档。 (底层文档还允许您决定如何处理用户交互,方法是提供DocumentFilter和/或DocumentListener)
  4. 文档确定要执行什么操作,其当前状态将反映在 TextComponent中。

从上面的解释中,您会同意最好使用Document或附加的DocumentListener来决定TextComponent基础Document将包含的内容。

现在,使用JTextField.getText()。length,就像你想要的那样,意味着你想要首先检查长度,然后让TextComponent再次通过上面的过程(1-4)来移除当您可以在第一时间使用它的Document(或DocumentFilter或DocumentListener)时,使用不需要的字符。

所以为了最终回答这个问题,使用两者都会导致意想不到的结果(错误),并且使用Document(或DocumentFilter或DocumentListener)会更有效。

TL; DR JTextField显示的内容是从其Document中获得的。如果您需要调整显示内容,那么在文档显示在JTextField中之前将其决定为更有效,而不是使用JTextField决定在显示之后应该显示哪些内容。

+0

简而言之,JTextField实际上是由底层Document控制的,因此同样的Document决定了JTextField与用户交互后应该发生什么操作。所以层次结构是:Document ------- TextComponent –

相关问题