Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jface在列表中搜索所需元素_Java_Swt_Jface - Fatal编程技术网

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

Java 如何使用jface在列表中搜索所需元素,java,swt,jface,Java,Swt,Jface,我使用swt创建了一个列表,其中显示了动物的列表,例如:猫、狗、骆驼、大象。现在,我需要在搜索栏中搜索特定的动物前犬,并且只有该动物必须显示在列表中。因此,如何使用jface完成此操作。我是jface的新手,请帮助我搜索列表。所有jface查看器支持查看器过滤器s。这是一个很好的教程 下面是一个非常基本的示例,它应该向您展示如何使用ViewerFilters: public static void main(String[] args) { Display display = new D

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

所有jface
查看器支持
查看器过滤器
s。这是一个很好的教程

下面是一个非常基本的示例,它应该向您展示如何使用
ViewerFilter
s:

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;
    }
}
publicstaticvoidmain(字符串[]args)
{
显示=新显示();
外壳=新外壳(显示);
shell.setText(“StackOverflow”);
shell.setLayout(新的GridLayout(1,false));
列表输入=新的ArrayList();
输入。添加(“Dodo”);
输入。添加(“独角兽”);
最终MyFilter过滤器=新的MyFilter();
最终ListViewer=新ListViewer(外壳);
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
setContentProvider(新的ArrayContentProvider());
viewer.setInput(输入);
viewer.addFilter(filter);
Text Text=新文本(shell、SWT.BORDER);
setLayoutData(新的GridData(SWT.FILL,SWT.beging,true,false));
text.addListener(SWT.Verify,new Listener())
{
@凌驾
公共无效handleEvent(事件e)
{
最终字符串oldS=((Text)e.widget).getText();
最终字符串newS=oldS.substring(0,e.start)+e.text+oldS.substring(e.end);
filter.setSearchText(新闻);
viewer.refresh();
}
});
shell.pack();
shell.open();
而(!shell.isDisposed())
{
如果(!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
私有静态类MyFilter扩展了ViewerFilter
{
私有字符串搜索字符串;
public void setSearchText(字符串s)
{
this.searchString=“*”+s+”*”;
}
@凌驾
公共布尔选择(查看器、对象父元素、对象元素)
{
if(searchString==null | | searchString.length()==0)
{
返回true;
}
字符串p=(字符串)元素;
if(p.matches(searchString))
{
返回true;
}
返回false;
}
}
看起来像这样:

过滤前

过滤后