我想限制用户在JTextField中输入10个以上的字符。 我可以通过检查if(JTextField.getText()。length()< 10){}这是最大字符数,但大多数人建议使用DocumentFilter。 你能解释一下这样做的确切原因吗?如果我同时使用这两种方法会产生什么后果。
答案 0 :(得分:2)
我认为最好理解Text Components(JTextField所属的)是如何工作的以及它们的组成部分。
简而言之,我将通过Java文档中的一些提取来解释:
从上面的解释可以看出,当用户与TextComponent交互时,预计会发生以下步骤:
从上面的解释中,您同意最好使用Document或附加的DocumentListener来决定TextComponent底层Document包含的内容。
现在,使用JTextField.getText()。length,就像你想要的那样,意味着你要首先检查长度,然后再请求TextComponent再次通过上面的过程(1-4)来删除不想要的您可以在第一时间使用它的Document(或DocumentFilter或DocumentListener)时的字符。
因此,要最终回答这个问题,使用两者都会导致意外结果(错误),使用文档(或DocumentFilter或DocumentListener)会更有效。
TL; DR JTextField显示的内容来自其Document。如果你需要调整显示的内容,那么在文档在JTextField中显示之前决定它的效率要高于使用JTextField决定在显示它之后应该显示的内容。