使用Lucene 對JTable進行搜索
Posted on 2009-10-19 15:52 guanminglin@gmail.com 閱讀(29226) 評論(11) 編輯 收藏 所屬分類: JavaSE 、NetBeans經常會遇到一個表格中有許多的數據,想要找到一條符合自己要求的數據會比較麻煩,需要一條一條的找。數據量小還好,但是如果有幾百條上千條的數據找起來就比較麻煩了。Lucene 提供了一個拓展包 lucene-swing,可以很方便的對JTable進行搜索。
下面介紹一下拓展包,以及如何使用這個拓展包:
Lucene-swing 并不在Lucene的核心包中而是以拓展包的形式存在,所以你可以在下載的Lucene包中找到它。請看下面的截圖:
在這個包中提供了兩種搜索形式:TableSearcher 和 ListSearcher
顧名思義 就是提供對JTable 和JList 進行搜索的功能。
一、表格搜索功能
1、org.appche.lucene.swing.models.TableSearcher
要想對表格進行搜索,先要對表格的模型進行包裝,在Swing的MVC模型中model中存在數據,操作表格中的數據基本上都是操作Model中的數據。Lucene -swing對表格模型進行了包裝,所以可以很好的對JTable進行搜索。
一般使用Lucene-swing的步驟是:
MytableModel model = new MytableModel(); //再新建一個表格模型
//下面就是包裝原有的表格模型了
//其實TableSearcher 也是一個表格模型,只是對原有的表格模型進行了包裝
TableSearcher searcher = new TableSearcher(model);
table.setModel(searcher);
接著就可以在的搜索按鈕或者JTextField的鍵盤監聽事件中調用搜索方法了
一般情況下都會將這個方法封裝:
String keywords = keyWordTF.getText().toLowerCase();
searcher.search(keywords); //搜索表格并返回結果
}
下面是我寫的一個例子的截圖:
初始化界面:
搜索結果界面:
如果你細心的話,你會發現上面的搜索都是英文的,那它能搜索中文嗎?答案是肯定的,不過你要提供中文分詞器。在TableSearcher 類中提供了一個設置分詞器的方法:
中文分詞器,我這里使用的是JE 分詞,jeasy.analysis.MMAnalyzer。
所以你可以這樣調用:searcher.setAnalyzer(new MMMnalyzer());
接下來就來檢驗一下是否可以對中文進行搜索了。
現改變一些模型數據,改完后的界面:
可以看到有兩條有中文的數據,現在看看效果如何:

可以看到已經可以搜索中文了。