gpt4 book ai didi

java - 如何使用jface在列表中搜索所需元素

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

我使用 swt 创建了一个列表,它显示动物列表,例如:猫、狗、 Camel 、大象。现在我需要在搜索列中搜索特定的动物(前狗),并且只有该动物必须显示在列表中。那么如何使用 jface 来完成此操作。我是 jface 的新手,请帮助我搜索列表。

最佳答案

所有 JFace Viewer 都支持 ViewerFilterHere是关于它们的很好的教程。

这是一个非常基本的示例,向您展示如何使用 ViewerFilter:

public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));

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

final MyFilter filter = new MyFilter();

final ListViewer viewer = new ListViewer(shell);
viewer.getList().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
viewer.setContentProvider(new ArrayContentProvider());
viewer.setInput(input);
viewer.addFilter(filter);

Text text = new Text(shell, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
text.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);

filter.setSearchText(newS);
viewer.refresh();
}
});

shell.pack();
shell.open();

while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}

private static class MyFilter extends ViewerFilter
{
private String searchString;

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

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

String p = (String) element;

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

return false;
}
}

看起来像这样:

过滤前

enter image description here

过滤后

enter image description here

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

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