我想限制用户在JTextField中输入超过10个字符。 我可以通过检查if(JTextField.getText()。length()< 10){}这是最大字符数,但大多数人建议使用DocumentFilter来代替。 你能否解释一下我做这件事的确切原因,以及如果我同时使用两者,会有什么后果。使用JTextField.getText()。length()和DocumentFilter来限制JTextField中的字符数量有什么区别?
-1
A
回答
2
我认为最好理解文本组件(它是一个JTextField的一部分)是如何工作的以及它们是由什么组成的。
为了削减长话短说,我会从Java文档的一些提取解释:
- 一个Swing文本组件使用文件来代表它的内容(这 内容是什么,你TextComponent中看到) 。
- 文档内容发生任何变化时都会发生文档事件。您将DocumentListener附加到文本组件的Document,而不是文本组件本身。请检查https://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html 以了解更多详细信息
- DocumentFilter顾名思义是 Document过滤器。当包含DocumentFilter的文档(包含您的JTextField中的 )被修改时,它会将适当的方法调用转发给DocumentFilter。默认实现允许修改发生。详情请查询https://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html。
从以上说明显而易见的是,预计有下面步骤时,用户与交互TextComponent中发生:
- 用户与TextComponent中相互作用。
- Choice上告知它的用户 互动
- 底层文档决定如何处理与用户的交互 /输入做的基础文档。 (底层文档还允许您决定如何处理用户交互,方法是提供DocumentFilter和/或DocumentListener)
- 文档确定要执行什么操作,其当前状态将反映在 TextComponent中。
从上面的解释中,您会同意最好使用Document或附加的DocumentListener来决定TextComponent基础Document将包含的内容。
现在,使用JTextField.getText()。length,就像你想要的那样,意味着你想要首先检查长度,然后让TextComponent再次通过上面的过程(1-4)来移除当您可以在第一时间使用它的Document(或DocumentFilter或DocumentListener)时,使用不需要的字符。
所以为了最终回答这个问题,使用两者都会导致意想不到的结果(错误),并且使用Document(或DocumentFilter或DocumentListener)会更有效。
TL; DR JTextField显示的内容是从其Document中获得的。如果您需要调整显示内容,那么在文档显示在JTextField中之前将其决定为更有效,而不是使用JTextField决定在显示之后应该显示哪些内容。
相关问题
- 1. “hello”.length和“hello”.length是什么区别?
- 2. X-Content-Length和Content-Length有什么区别?
- 3. 使用DocumentFilter过滤字符串,空格和点(。)的JTextField
- 4. 强制JTextField字符串值,而DocumentFilter只允许数字
- 5. 字符串和Javascript中的字符数组有什么区别?
- 6. OpenCL函数length()和fast_length()之间有什么区别?
- 7. 使用有什么区别?和@作为风格限定符?
- 8. 十六进制和字符数组打印有什么区别?
- 9. 在ICU UnicodeString中countChar32()和length()之间有什么区别?
- 10. R中的字符串和字符有什么区别?
- 11. golang中的[]字符串和...字符串有什么区别?
- 12. 限制JTextField字符输入
- 13. 在C#中。字符串和字符串有什么区别?
- 14. 字典和数组有什么区别?
- 15. 这个android.permission.STATUS_BAR_SERVICE用于什么?使用权限和权限有什么区别?
- 16. Ruby中的字符串和符号有什么区别?
- 17. Ruby中的字符串和符号有什么区别?
- 18. 变量的=和=>有什么区别?
- 19. Ruby中的符号和变量有什么区别?
- 20. LISP中的变量和符号有什么区别?
- 21. 有什么区别`和$(Bash中有什么区别?
- 22. C字符串和C++字符串有什么区别?
- 23. 字符和字符编码有什么区别
- 24. 字符串和字符串有什么区别?
- 25. COM字符串(BSTR)和.NET字符串有什么区别?
- 26. 在java中使用这些字符串有什么区别吗?
- 27. 在字符串中使用回车符和\ r \ n有什么区别
- 28. 使用类和字典来表示Python中的二叉树有什么区别?
- 29. char []和C++中的字符串有什么区别?
- 30. R中的NULL和字符(0)有什么区别?
简而言之,JTextField实际上是由底层Document控制的,因此同样的Document决定了JTextField与用户交互后应该发生什么操作。所以层次结构是:Document ------- TextComponent –