[英]How to filter a list of required elements in list using listviewer in swt jface
[英]How to search for required elements in list using jface
我使用swt創建了一個列表,其中顯示了動物的列表,例如:貓,狗,駱駝,大象。 現在我需要在搜索欄中搜索特定動物的前狗,並且只在列表中顯示該動物。因此,如何使用jface做到這一點。我是jface的新手,請幫助我搜索列表。
所有JFace Viewer
支持ViewerFilter
。 這是關於它們的很好的教程。
這是一個非常基本的示例,應向您展示如何使用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;
}
}
看起來像這樣:
過濾之前
過濾后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.