2017-07-19 25 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 –

相關問題