2011-07-07 4 views
0

編集ボックス(テキストの変更時)のテキストに従って、vaadinツリーからリーフを非表示にしたい。 つまり、editboxのテキストが「ab」の場合、表示するテキストは「ab」で始まるリーフだけです。 テキストが空の場合は、すべての葉を表示したい。Vaadinのフィルタツリー

どうすればいいですか?

答えて

3

ツリーに添付されているデータコンテナをフィルタリングする必要があります。

新しいフィルタAPIがバージョン6.6.0で導入されました。カスタムフィルタを作成できます。私はまだ新しい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); 
    } 
}); 

れ、データコンテナはあなたに添付されたデータコンテナでありますtreeとproperyIdは、フィルタリングするテキストを含むコンテナフィールドのプロパティIDです。

私は現在、適切な開発ツールにアクセスできないので、上記のコードはテストされていないことに注意してください。

+0

tnxでも、テーブルに関連付けられたdataContainerがない場合はどうなりますか?私は、項目をtable.additem()メソッドで明示的に追加したらどうなるでしょうか?ここでdataContainerを取得するにはどうすればいいですか? –

+0

常にデータコンテナがあります。提供しない場合は、テーブルが作成されます(IIRC IndexedContainer)。あなたはtable.getContainerDataSource()経由でアクセスすることができます。 – miq

+0

Tnxしかし、その方法では、フィルターの削除/追加メソッドが表示されません:(私は、デフォルトのコンテナはフィルタで動作しないと思うEDIT - 私はこれを行うことによって動作していると思うIndexedContainerコンテナ=(IndexedContainer)valuesTable.getContainerDataSource (); –