Posted on 2009-10-19 15:52
guanminglin@gmail.com 閱讀(29219)
評論(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的步驟是:
JTable table = new Jtable(); //先建立一個表格對象
MytableModel model = new MytableModel(); //再新建一個表格模型
//下面就是包裝原有的表格模型了
//其實TableSearcher 也是一個表格模型,只是對原有的表格模型進行了包裝
TableSearcher searcher = new TableSearcher(model);
table.setModel(searcher);
接著就可以在的搜索按鈕或者JTextField的鍵盤監聽事件中調用搜索方法了
searcher.search(keywords)
一般情況下都會將這個方法封裝:
public void tableSearch() {
String keywords = keyWordTF.getText().toLowerCase();
searcher.search(keywords); //搜索表格并返回結果
}
下面是我寫的一個例子的截圖:
初始化界面:

搜索結果界面:

如果你細心的話,你會發現上面的搜索都是英文的,那它能搜索中文嗎?答案是肯定的,不過你要提供中文分詞器。在TableSearcher
類中提供了一個設置分詞器的方法:

中文分詞器,我這里使用的是JE
分詞,jeasy.analysis.MMAnalyzer。
所以你可以這樣調用:searcher.setAnalyzer(new
MMMnalyzer());
接下來就來檢驗一下是否可以對中文進行搜索了。
現改變一些模型數據,改完后的界面:

可以看到有兩條有中文的數據,現在看看效果如何:

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