1

GridTreeViewer日食フィルターなどのフィルターを追加する必要がある星雲を使用しています。Window->Preferences に移動すると、左側のツリーの上部に「type filter text」というフィルターが表示されます。

TreeViewer私はFilteredTree-で試しました

final FilteredTree filteredTree = new FilteredTree(parent, SWT.BORDER
                    | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION,
                    new MyPatternFilter(), true);
 TreeViewer treeViewer = filteredTree.getViewer();

上記のコードは、TreeViewer. そのような種類のフィルターを星雲に取り付ける同様の方法はありGridTreeViewerますか? はいの場合、教えてください。とても役に立ちます。ありがとう。

4

1 に答える 1

2

独自のクイック検索アダプターを作成する必要があります。のコードを確認してFilteredTreeください。

会社の所有物であるため、独自のアダプターを投稿することはできません。ここにいくつかのヒントがあります。

に必要なものMyQuickSearchAdapter:

  • public QuickSearchAdapter(Composite parent)コンストラクタ

  • およびを実行するsetViewer(StructuredViewer)API ( については以下を参照)this.viewer = viewerthis.viewer.addFilter(viewerFilter)viewerFilter

  • getLabelProvider()ビューアーLabelProvider(この場合はGridTreeViewer)にアクセスするための抽象メソッド

  • Textクイック検索領域を表すフィールドの作成メソッド。

  • (オプション) クリックするとテキストをクリアするラベル/ボタンの作成方法 ( のようにFilteredTree) - 私の意見では、これはやり過ぎですが。

  • private MyViewerFilter extends ViewerFilter実際のフィルタリングを行うネストされたクラス。これにはString、検索テキストを保持するインスタンス フィールドがあります。このフィールドには、フィルター ボックスに何かを入力するたびに呼び出されるセッターがあります。のようになりviewerFilter.setSearchText(filterBox.getText());ます。このネストされたクラスは、 をオーバーライドしselect(Viewer, Object, Object)、 を使用しgetLabelProvider().getText(element)て特定のセルのテキストを抽出します。何かのようなもの:

    // Automatically adds wildcard characters before and after search string:
    public static final String QSEARCH_REGEX_PATTERN = "(.*)%s(.*)"; //$NON-NLS-1$
    
    private class MyViewerFilter extends ViewerFilter 
    {
        // --------------------- <Instance Fields> -----------------------
    
        private String searchString;
    
        // --------------------- <Setters> -----------------------
    
        /**
         * @param 
         *      Text that goes inside the REGEX pattern
         */
        public void setSearchText(final String searchString) 
        {
            //this.searchString = "(.*)" + searchString.toLowerCase() + "(.*)";  //$NON-NLS-1$ //$NON-NLS-2$
            this.searchString = String.format(QSEARCH_REGEX_PATTERN, searchString.toLowerCase());
        }
    
        // --------------------- <Overridden search method> -----------------------
    
        @Override
        public boolean select(final Viewer viewer, final Object parentElement, final Object element) 
        {
            if (StringUtils.isEmpty(searchString))
                return true;
    
            final String text = getLabelProvider().getText(element);
    
            if (StringUtils.isEmpty(text))
                return true;
    
            return text.toLowerCase().matches(searchString);
        }
    }
    

それが難しい部分です。その後、 というクラスを作成しMyFilteredGridTreeViewer、グリッド ビューアーの横にクイック検索アダプターを追加します。また、 を呼び出すことを忘れないquickSearchAdapter.setViewer(gridViewer)でください。これで完了です。

于 2013-11-26T11:32:48.240 に答える