Posted on 2009-10-19 15:52
guanminglin@gmail.com 阅读(29200)
评论(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());
接下来就来检验一下是否可以对中文进行搜索了。
现改变一些模型数据,改完后的界面:
可以看到有两条有中文的数据,现在看看效果如何:
可以看到已经可以搜索中文了。