Столбцы и фильтрованное дерево в Eclipse - PullRequest
1 голос
/ 22 июня 2010

Я пытаюсь создать FilteredTree с несколькими столбцами, но безуспешно. Если я использую TreeViewer, столбцы работают нормально, но когда я переключаюсь на использование FilteredTree, я могу заставить его работать, только если удаляю столбцы, поэтому мне интересно, есть ли способ использовать FilteredTree с столбцы.

Ответы [ 3 ]

1 голос
/ 22 января 2015

Вы можете сделать это так же, как с нормальным деревом Вот полная настройка.

PatternFilter patternFilter = new PatternFilter();
patternFilter.setIncludeLeadingWildcard(true);
filteredTree = new FilteredTree(getContainer(), SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL, patternFilter, true);

TreeViewer viewer = filteredTree.getViewer();
tree = viewer.getTree();
tree.setHeaderVisible(true);

TreeColumn modelColumn = new TreeColumn(tree, SWT.LEFT);
modelColumn.setText("Model");
modelColumn.setWidth(400);

TreeViewerColumn treeViewerModelColumn = new TreeViewerColumn(viewer, modelColumn);
treeViewerModelColumn.setLabelProvider(new ColumnLabelProvider());
1 голос
/ 06 июня 2011

Вы, конечно, можете использовать FilteredTree со средством просмотра столбцов.Например (и это также демонстрирует сохранение использования TreeColumnLayout с использованием FilteredTree):

final TreeColumnLayout tl = new TreeColumnLayout();

PatternFilter patternFilter = new PatternFilter();
patternFilter.setIncludeLeadingWildcard(true);
FilteredTree ft = new FilteredTree(treeViewerComposite, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | toolkit.getBorderStyle() | Window.getDefaultOrientation(), patternFilter, true) {            
   @Override
   protected Control createTreeControl(Composite parent, int style) {
       Control c = super.createTreeControl(parent, style);
       c.setLayoutData(null);
       c.getParent().setLayout(tl);
       return c;
   }        
};

viewer = ft.getViewer();
viewer.getTree().setHeaderVisible(true);

Теперь вы можете просто создать TreeColumn обычным способом, и ваши столбцы будут отображаться.

0 голосов
/ 06 ноября 2015

Да, есть способ, и решение здесь изложено: http://eclipsesource.com/blogs/2012/10/26/filtering-tables-in-swtjface/

image from EclipseSource blog

Точка по умолчанию PatternFilter требует, чтобы листья дерева были экземпляром ILabelProvider. В просмотрщике дерева на основе столбцов нет отдельного текстового представления для листа дерева.

Итак, если вы используете TreeViewerColumns в качестве столбцов дерева, PatternFilter будет использовать ColumnLabelProvider для каждого столбца. В этом случае вы исправите это путем создания подкласса PatternFilter и переопределения его своим собственным isLeafMatch(..)

В противном случае, при использовании TreeColumns для определения столбцов, TreeViewer должен иметь ITableLabelProvider. Помимо этого, вы создадите подкласс PatternFilter и снова переопределите метод isLeafMatch(..)

...