fluminis
fluminis

Reputation: 4099

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

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?

Upvotes: 6

Views: 9843

Answers (2)

Sandman
Sandman

Reputation: 9692

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

Upvotes: 4

Prakash G. R.
Prakash G. R.

Reputation: 4892

org.eclipse.ui.dialogs.FilteredTree is specifically available for that purpose. Why can't you use that?

Upvotes: 0

Related Questions