Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a ViewerFilter on a JFace TableViewer that update dynamically?

Tags:

java

swt

jface

I want to add in a SWT/JFace application a search functionality that filter a TableViewer as the user enter text in the search text field.

final Text filterText = new Text(parent, SWT.NONE);
filterText.addModifyListener(new ModifyListener() {
    @Override
    public void modifyText(ModifyEvent arg0) {
        //TODO how to update the viewer filter with the new text ?
    }
});

TableViewer tableViewer = new TableViewer(...);

ViewerFilter filterViewer = new ViewerFilter() {
    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
        if (filterText.getText() == "") {
            return true;
        }
        //do my stuff to know if element need to be filtered or not
        return false;
    }
};
tableViewer.addFilter(filterViewer);

Do I need to remove the filter and create a new one in the modify listener or is there a better solution?

like image 266
fluminis Avatar asked May 23 '11 09:05

fluminis


1 Answers

Basically, you need to have a way of passing the entered text to the filter, in your select method you should filter based on this text, and in your text widget's listener pass the text to the filter and call viewer.refresh() on your table.

This example should help you: http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced/article.html#jfacetable_filter

like image 57
Sandman Avatar answered Oct 22 '22 06:10

Sandman