1

我正在尝试创建一个FilteredTree没有运气的有几列。如果我使用 aTreeViewer列可以正常工作,但是当我切换到使用 aFilteredTree时,如果我删除列,我只能让它工作,所以我想知道是否有一种方法可以FilteredTree与列一起使用。

4

3 回答 3

1

您可以像使用普通 Tree一样执行此操作。这是一个完整的设置。

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());
于 2015-01-22T08:27:05.643 回答
1

您当然可以将 FilteredTree 与列查看器一起使用。例如(这也演示了使用 FilteredTree 保留 TreeColumnLayout 的使用):

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,您的列就会出现。

于 2011-06-06T14:04:21.490 回答
0

是的,有一种方法,这里概述了解决方案:http: //eclipsesource.com/blogs/2012/10/26/filtering-tables-in-swtjface/

图片来自 EclipseSource 博客

关键是默认PatternFilter需要树叶作为实例ILabelProvider。在基于列的 treeviewer 中,树叶没有单一的文本表示。

因此,如果您将TreeViewerColumns其用作树列,PatternFilter则将ColumnLabelProvider为每一列使用 。在这种情况下,您将通过子类化PatternFilter并用您自己的覆盖它来修复isLeafMatch(..)

否则,当TreeColumns用于定义列时,TreeViewer将需要有一个ITableLabelProvider. 除此之外,您将继承PatternFilter该方法,并再次覆盖该方法isLeafMatch(..)

于 2015-11-06T20:49:58.117 回答