2011-04-02 16 views

回答

3

您確定要突出顯示而不是篩選出多餘的結果嗎?如果您突出顯示,則必須滾動瀏覽整個列表才能找到所有匹配的結果,而如果過濾顯示,則可以更輕鬆地找到要查找的內容。

如果你走過濾路線,我會考慮GlazedLists,這是一個非常棒的Java庫,用於處理諸如動態過濾,排序等JTables。

如果你仍然想要突出顯示的路線,那麼有兩種主要的方法可以實現這一點。首先是使用JTable的ListSelectionModel,並確保所有匹配的行都在選定的集合中;這將使它們在視覺上與最少的編碼區分開來。另一方面,只要用戶在表格中拖動並選擇其他內容,視覺效果就會丟失。

完成此操作的第二種方法是使用自定義TableCellRenderer,如果行符合您的選擇標準,則會更改行的呈現方式。一個簡單的方法可以改變背景顏色。

+0

如果我繼續使用過濾器位,我如何確保當用戶完成後,過濾器將停止並顯示正常結果? – 2011-04-02 01:58:46

+1

GlazedLists允許您在綁定給定的JTextField後實時查看過濾器更新。因此,只要清除過濾器(即通過選擇所有文本並按刪除,或僅按退格鍵),整個表格就會再次顯示。 – I82Much 2011-04-02 02:06:15

1

關於How to Use Tables的Swing教程有一個關於過濾的部分,因此您可以只顯示符合搜索條件的數據。如果你想看到所有的數據,那麼你只需刪除過濾器。

如果你真的想單獨突出顯示,那麼我會看看Table Row Rendering的方法。

0

我可以告訴你我是如何做到的。 我實現了我的搜索以作爲文檔中的搜索工作,即一次找到單個結果。我存儲所選行的當前索引,或者如果先前未選擇行,則從第一個索引開始。然後,我的模型實現了我的接口,可以搜索下一個或上一個匹配的功能,下面的示例顯示使用find next match方法,該方法返回表中找到匹配字符串的行的索引,然後將選擇更改爲否則我會清除選擇以讓用戶知道沒有匹配。


    int index = serchableTableModel.findNextMatchIndex(serchedText, currentIndex); 
    if(index != -1) 
    table.changeSelection(index, 0, false, false); 
    else 
    table.clearSelection(); 

我希望這可以解決您的問題。

注意:之前我並沒有意識到上面列出的列表,他們確實看起來很有希望。他們可以幫助我實現對錶格的排序,搜索自己。

相關問題