1

FilteredTree運の悪いいくつかの列を作成しようとしています。列を使用すると正常にTreeViewer動作しますが、使用に切り替えるとFilteredTree、列を削除した場合にのみ動作するようになるため、列で使用する方法があるかどうか疑問に思って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。列ベースのツリービューアーでは、ツリー リーフのテキスト表現は 1 つではありません。

そのため、TreeViewerColumnsツリー列として使用している場合、は各列にPatternFilterを使用します。ColumnLabelProviderこの場合、をサブクラスPatternFilter化し、独自のものでオーバーライドすることで修正しますisLeafMatch(..)

それ以外の場合、 を使用TreeColumnsして列を定義する場合、 にTreeViewerITableLabelProvider. これを超えて、メソッドをサブクラス化しPatternFilter、再びメソッドをオーバーライドしますisLeafMatch(..)

于 2015-11-06T20:49:58.117 に答える