簡體   English   中英

如何在swt jface中使用listviewer過濾列表中所需元素的列表

[英]How to filter a list of required elements in list using listviewer in swt jface

我使用SWT創建了一個列表,其中顯示了動物列表,例如:貓,狗,駱駝,大象。 現在,我需要在搜索欄中搜索特定的前狗動物,並且只在列表中顯示該動物。 我已經編寫了用於過濾列表的代碼,但是列表未得到過濾,因此無法找到問題所在。 示例代碼如下

final List list = new List(listComposite, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);


            gridData = new GridData();
            gridData.horizontalAlignment = SWT.FILL;
            gridData.grabExcessHorizontalSpace = true;
            gridData.verticalAlignment = SWT.FILL;
            gridData.grabExcessVerticalSpace = true;
            list.setLayoutData(gridData);


            final Map<String,String> descriptionMappernewer = DescriptionParsers.getListOfFXToolMethods();
            for(String key: descriptionMappernewer.keySet())
                list.add(key);


             final MyFilter filter = new MyFilter();

            final ListViewer viewer = new ListViewer(listComposite);
            //viewer.getList();
            viewer.getList().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
            //viewer.getList();
            viewer.setContentProvider(new ArrayContentProvider());
            viewer.setInput(list);
            //viewer.setComparer( list);


            /*
            comparator = new MyViewerComparator();
            viewer.setComparator(comparator);
            viewer.setSorter(sorter);
            */

            txtName.addListener(SWT.Verify, new Listener()
            {
                @Override
                public void handleEvent(Event e)
                {
                    final String oldS = ((Text) e.widget).getText();
                    final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end);
                    System.out.println(newS);
                    //MyFilter filter;
                    filter.setSearchText(newS);
                    viewer.refresh();
                }
            });
            viewer.addFilter(filter);

MyFilterClass如下

private static class MyFilter extends ViewerFilter
    {
        private String searchString;

        public void setSearchText(String s)
        {
            this.searchString = ".*" + s + ".*";
            System.out.println(s);
        }

        @Override
        public boolean select(Viewer viewer, Object parentElement, Object element)
        {
            if (searchString == null || searchString.length() == 0)
            {
                System.out.println("no string");
                return true;
            }

            String p = (String) element;

            if (p.matches(searchString))
            {
                System.out.println(searchString);
                return true;
            }

            return false;
        }
    }    

請幫我過濾列表,因為我是jface的新手,無法找到錯誤

您正在將org.eclipse.swt.widgets.List傳遞給ListViewer.setInput方法-這是錯誤的。

您在上一個問題中給出的代碼使用java.util.List ,這是在此處使用的正確方法。

因此,將列表更改為如何使用jface在列表中搜索所需元素中所示

因此,引用第一個答案使用:

List<String> input = new ArrayList<>();
input.add("Dodo");
input.add("Unicorn");
input.add("Wyvern");

viewer.setInput(input);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM