我想限制用戶在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. OpenCL函數length()和fast_length()之間有什麼區別?
- 3. 在ICU UnicodeString中countChar32()和length()之間有什麼區別?
- 4. 限制JTextField字符輸入
- 5. 字典和數組有什麼區別?
- 6. Ruby中的字符串和符號有什麼區別?
- 7. Ruby中的字符串和符號有什麼區別?
- 8. 變量的=和=>有什麼區別?
- 9. LISP中的變量和符號有什麼區別?
- 10. DocumentFilter只允許將數字和句點(。)轉換爲JTextField?
- 11. 有什麼區別`和$(Bash中有什麼區別?
- 12. C字符串和C++字符串有什麼區別?
- 13. 字符和字符編碼有什麼區別
- 14. 字符串和字符串有什麼區別?
- 15. 在字符串中使用回車符和\ r \ n有什麼區別
- 16. 在java中使用這些字符串有什麼區別嗎?
- 17. R中的NULL和字符(0)有什麼區別?
- 18. definePlugin和env變量有什麼區別?
- 19. 對象和變量有什麼區別?
- 20. 這些字符有什麼區別?
- 21. 兩個字符串有什麼區別?
- 22. 使用int [] []和int [,]有什麼區別?
- 23. 使用和extern有什麼區別?
- 24. 使用WorkflowInvoker和WorkflowApplication有什麼區別?
- 25. 有什麼區別使用=和:在javascript
- 26. 使用Object.create()和使用賦值運算符有什麼區別?
- 27. 在聲明變量時使用「」和「'和()有什麼區別?
- 28. 複製和克隆有什麼區別?
- 29. 強制和超載有什麼區別?
- 30. 「複製」和「保留」有什麼區別?
簡而言之,JTextField實際上是由底層Document控制的,因此同樣的Document決定了JTextField與用戶交互後應該發生什麼操作。所以層次結構是:Document ------- TextComponent –