SWT TableViewer 添加Filter实现快速检索

时间:2023-01-18 15:23:16

</pre>在TreeViewer中有包含FilterTree实现快速检索功能,TableViewer并没有快速检索功能,那模仿快速检索的Filter实现快速检索。</p><p>1、创建自定义Filter继承ViewerFilter类,类中添加判断条件,实现过滤的判断。</p><p><pre name="code" class="java">/**
*
*/
package com.atom.studio.bizeditor.utils;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;

import com.atom.studio.database.model.TableBean;

/**
* 快速检索过滤
*
* @author sunming
*
*/
public class AtomTableViewerFilter extends ViewerFilter {

// 过滤字符串
private String pattern;

@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (pattern != null && !"".equals(pattern)) {
if (pattern != null) {
if (element != null && element instanceof TableBean)
if (!((TableBean) element).getTableName().toLowerCase()
.contains(pattern.toLowerCase()))
return false;
}
}
return true;
}

public String getPattern() {
return pattern;
}

public void setPattern(String pattern) {
this.pattern = pattern;
}

}


2、在viewer中添加过滤器,并添加过滤字符串输入的文本框text,text添加modify监听,随时更新表格中的数据实现过滤。

@Override
public void createControl(Composite parent) {
// TODO Auto-generated method stub
setPageComplete(false);
filter = new AtomTableViewerFilter();

Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
composite.setLayoutData(new GridData(GridData.FILL_BOTH));

Label filterLabel = new Label(composite, SWT.NONE);
filterLabel.setText("快速检索:");

filterText = new Text(composite,SWT.BORDER);
filterText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
filterText.addModifyListener(new ModifyListener() {

@Override
public void modifyText(ModifyEvent e) {
// TODO Auto-generated method stub
filter.setPattern(filterText.getText());
tableviewer.refresh();
}
});

tableviewer = CheckboxTableViewer.newCheckList(composite, SWT.NONE
| SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.V_SCROLL);
tableviewer.setLabelProvider(new BMTableLabelProvider());
tableviewer.setContentProvider(new BMTableContentProvider());
tableviewer.setUseHashlookup(true);// 添加hash链表,实现快速检索
tableviewer.setFilters(new ViewerFilter[] { filter });

Table table = tableviewer.getTable();
table.setLayout(new GridLayout());
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
table.setLayoutData(gridData);
table.setLinesVisible(true);