2016-11-24 46 views
0

我正在嘗試爲正在編寫的程序創建自動完成文本框。我有邏輯下來,但我有一些麻煩,正確實施。首先,我嘗試了一個關鍵的監聽器,但是這個解決方案在處理多個按鍵的方式上有點奇怪。然後我嘗試了更好的DocumentListener,但由於線程問題,我不允許從Listener內編輯文檔。我讀了一些關於DocumentFilter的內容,但是我找不到關於如何使用它的單個指南。有沒有辦法從documentListener編輯文檔?或者你會推薦DocumentFilter,如果是的話,你如何使用它?在Java中使用Document Listener的自動完成文本框

+1

您可以通過將編輯內容放置在Runnable中並使用SwingUtilities.invokeLater(...)將它排入事件線程來謹慎編輯Document *,但這是一件很危險的事情。至於如何使用DocumentFilter,這個網站上有很多這樣的例子,其中有幾個是我寫的。只需[搜索網站](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=site:stackoverflow.com+java+swing+DocumentFilter)(點擊鏈接)。 –

+0

是的,我嘗試從監聽器中使用invokeLater,它運行在一個無限循環。任何想法爲什麼會發生? – namarino

+1

這是危險的一部分 - 當您更改文檔時調用偵聽器,並且如果您從偵聽器中更改文檔,則可能會導致循環引用。 –

回答

0

DocumentListener不應該用於編輯文檔。這樣做需要調用SwingUtilities.invokeLater(...),並且由於DocumentListener檢測到文檔的更改,所以任何編輯都會導致無限循環。最好的辦法是使用DocumentFilter。