[英]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.