我想根据某些编辑框中的文本(在文本更改时)隐藏来自vaadin树的叶子。 即如果editbox中的文本是“ab”,我想只显示带有以“ab”开头的文本的叶子。 如果文本为空,我想显示所有叶子。
我该怎么做?
答案 0 :(得分:3)
您必须过滤附加到树的数据容器。
6.6.0版中引入了一个新的Filter API,允许您创建自定义过滤器。我还没有尝试过新的API,但在你的情况下它应该是这样的:
textField.addListener(new FieldEvents.TextChangeListener() {
void textChange(FieldEvents.TextChangeEvent event) {
// Remove existing filter (if any).
// This is OK if you don't use any other filters, otherwise you'll have to store the previous filter and use removeContainerFilter(filter)
dataContainer.removeAllContainerFilters();
// Create a new filter which ignores case and only matches String prefix
SimpleStringFilter filter = new SimpleStringFilter(propertyId, event.getText(), true, true);
// Add the new filter
dataContainer.addContainerFilter(filter);
}
});
其中 textField 是您的“编辑框”, dataContainer 是附加到树的数据容器,而 properyId 是属性ID包含要过滤的文本的容器字段。
请注意,上述代码未经测试,因为我目前无法访问相应的开发工具。