0
編集ボックス(テキストの変更時)のテキストに従って、vaadinツリーからリーフを非表示にしたい。 つまり、editboxのテキストが「ab」の場合、表示するテキストは「ab」で始まるリーフだけです。 テキストが空の場合は、すべての葉を表示したい。Vaadinのフィルタツリー
どうすればいいですか?
編集ボックス(テキストの変更時)のテキストに従って、vaadinツリーからリーフを非表示にしたい。 つまり、editboxのテキストが「ab」の場合、表示するテキストは「ab」で始まるリーフだけです。 テキストが空の場合は、すべての葉を表示したい。Vaadinのフィルタツリー
どうすればいいですか?
ツリーに添付されているデータコンテナをフィルタリングする必要があります。
新しいフィルタ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です。
私は現在、適切な開発ツールにアクセスできないので、上記のコードはテストされていないことに注意してください。
tnxでも、テーブルに関連付けられたdataContainerがない場合はどうなりますか?私は、項目をtable.additem()メソッドで明示的に追加したらどうなるでしょうか?ここでdataContainerを取得するにはどうすればいいですか? –
常にデータコンテナがあります。提供しない場合は、テーブルが作成されます(IIRC IndexedContainer)。あなたはtable.getContainerDataSource()経由でアクセスすることができます。 – miq
Tnxしかし、その方法では、フィルターの削除/追加メソッドが表示されません:(私は、デフォルトのコンテナはフィルタで動作しないと思うEDIT - 私はこれを行うことによって動作していると思うIndexedContainerコンテナ=(IndexedContainer)valuesTable.getContainerDataSource (); –