我想限制用戶在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 –