2017-06-05 98 views
1

我有一個顯示在JTable中並存儲在數據庫中的「人員」列表。我非常喜歡用戶在搜索區域輸入搜索結果時縮小了結果。使用文檔監聽器實時顯示搜索結果?

因此,例如,鍵入「S」將縮小顯示的名稱爲「蘇珊」,「斯蒂芬」,「史蒂夫」,這將是隻要你鍵入「蘇」

縮小到只是「蘇珊」

我正在考慮使用DocumentListener方法.removeUpdate(e).insertUpdate(e)來調用搜索底層數據庫並更新表視圖的方法 - 但這看起來很浪費。

實際上,我會創建一個新的數據庫連接和其他db對象,並在每次鍵入任何字符時刷新表。我不確定這是否僅僅是糟糕的設計,或者是會導致我產生問題的東西?有沒有更好的方法來解決這個問題?或者我應該堅持一個正常的搜索按鈕?

+0

[例如](https://stackoverflow.com/questions/26031383/how-to-filter-jtable-with-respect-to-a-specific-column/26031896#26031896)和[示例](https :/ /stackoverflow.com/questions/29500713/overlay-swing-text-label-as-text-is-entered/29506154#29506154) – MadProgrammer

+0

謝謝,一定會讀那些以及 – NickW

回答

2

我在一個JTable

顯示的「人」的名單。如果所有的人都顯示在一個JTable那麼你可以使用JTable的filtering功能顯示的一個子集表中的行。

有關更多信息和工作示例,請參閱Swing教程Sorting and Filtering中的部分。

+0

啊當然 - 我甚至不需要查詢數據庫。精彩,謝謝 – NickW

+0

@NickW,不要忘了點擊勾號「接受」答案,讓人們知道問題已經解決。 – camickr

+0

完成 - 哦,我覺得教程是打開我的程序,以痛苦的世界RE我如何刪除基於選定的行內容... XD。謝謝 – NickW

2

該決定取決於您的應用程序和用戶要求。有很多應用程序提供與您的類似的自動完成功能。

開始時沒有任何優化,看看它是如何執行的。然後,您可以嘗試不同的優化步驟,例如:

1)在用戶鍵入的內容和搜索請求之間添加等待期。例如,知道用戶很可能會搜索比'S'更具體的文本,請等到他們在第二個或第二個內輸入更多的字符。

2)在不同的線程中運行搜索,然後從那裏更新表。當用戶輸入下一個搜索時,您可以取消先前的搜索線程。

3)保持DB連接打開,同時用戶鍵入並關閉一定的時間(例如5秒)。但不會太長。

+0

生病可能會與上述,但謝謝回覆 – NickW