gpt4 book ai didi

java - 如何使用 swt jface 中的 listviewer 过滤列表中所需元素的列表

转载 作者:行者123 更新时间:2023-12-01 12:39:25 26 4
gpt4 key购买 nike

我使用 SWT 创建了一个列表,其中显示动物列表,例如:猫、狗、 Camel 、大象。现在我需要在搜索栏中搜索特定的动物(前狗),并且只有该动物必须显示在列表中。我已经编写了过滤列表的代码,但列表没有被过滤,我无法找到问题所在。示例代码如下

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 ,这是在这里使用的正确内容。

因此将列表更改为 How to search for required elements in list using jface 中所示

因此引用第一个答案:

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

viewer.setInput(input);

关于java - 如何使用 swt jface 中的 listviewer 过滤列表中所需元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25259409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com