在Vaadin过滤树

时间:2011-07-07 07:11:15

标签: java tree filtering vaadin

我想根据某些编辑框中的文本(在文本更改时)隐藏来自vaadin树的叶子。 即如果editbox中的文本是“ab”,我想只显示带有以“ab”开头的文本的叶子。 如果文本为空,我想显示所有叶子。

我该怎么做?

1 个答案:

答案 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包含要过滤的文本的容器字段。

请注意,上述代码未经测试,因为我目前无法访问相应的开发工具。