Как добавить ViewerFilter в JFace TableViewer, который обновляется динамически?

Я хочу добавить в приложение SWT/JFace функцию поиска, которая фильтрует TableViewer, когда пользователь вводит текст в текстовое поле поиска.

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);

Нужно ли удалять фильтр и создавать новый в прослушивателе изменений или есть лучшее решение?


person fluminis    schedule 23.05.2011    source источник


Ответы (2)


По сути, вам нужно иметь способ передачи введенного текста в фильтр, в вашем методе выбора вы должны фильтровать на основе этого текста, а в слушателе вашего текстового виджета передать текст фильтру и вызвать viewer.refresh() в вашей таблице.

Этот пример должен вам помочь: http://www.vogella.com/tutorials/EclipseJFaceTableAdvanced/article.html#jfacetable_filter

person Sandman    schedule 23.05.2011

org.eclipse.ui.dialogs.FilteredTree специально предназначен для этой цели. Почему ты не можешь это использовать?

person Prakash G. R.    schedule 23.05.2011
comment
Я работаю со средством просмотра таблиц, а не средством просмотра дерева, но я могу использовать тот же принцип. Но большая проблема в том, что я не нахожусь в приложении RCP, поэтому я не могу использовать WorkbenchJob. - person fluminis; 23.05.2011
comment
Почему вы не можете использовать WorkbenchJob в RCP? Это API, который также можно использовать в приложениях RCP. - person Prakash G. R.; 23.05.2011
comment
Проблема в том, что я НЕ в RCP! - person fluminis; 25.05.2011