2014-01-15 2 views
2

В каркасе Vaadin (v7.1.9), как мы можем удалить Component из его родителя?Vaadin - удалить компонент из его родителя

Я знаю только функции removeComponent, но это требует от меня, чтобы получить ручку на родителе (уродливый):

ComponentContainer parent = (ComponentContainer) child.getParent(); 
parent.removeComponent(child); 

Я попытался просто detach ребенка, но это удалить его из " приложение "без удаления Component из пользовательского интерфейса.

+1

Это способ сделать это. –

+0

Почему вы считаете это уродливым? Это похоже на удаление элемента из коллекции ('HashSet',' ArrayList' ...). – raffael

+1

Хорошо, мне нравится сравнение HashSet/ArrayList. Тем не менее, при работе с 'HashSet' или' ArrayList' вам не нужно бросать. 'remove' определяется в' Collection'. В Vaadin 'removeComponent' определен в' ComponentContainer' .., но 'Component.getParent()' вместо этого возвращает объект 'HasComponents'. Для меня это либо недостаток в API, либо это не способ делать то, что я хочу делать. Ребята, что вы думаете? –

ответ

4

если Младенец добавлен в любой макет вы должны привести его к тому, что раскладка например, если ребенок WS добавлен в AbsoluteLayout затем

AbsoluteLayout parent = (AbsoluteLayout) child.getParent(); 
parent.removeComponent(child); 

Попробуйте один

+0

Если этот Ans решит вашу проблему, тогда выберите его как ANS. – Mubasher

1

Или как это, если ребенок был добавлен в макете.

Layout parent = (Layout) child.getParent(); 
parent.removeComponent(child) 

Я думаю, что это лучше, чем решение Mubasher потому что реализация не зависит, я имею в виду вы не должны знать расположение Родитель и если он изменяет код по-прежнему работает.

+2

. Мой исходный код по той же причине лучше. 'ComponentContainer' - это самый низкий интерфейс, и это то, что определяет' removeComponent', поэтому он является наиболее надежным. Тем не менее, я решил, что это недостаток API Vaadin, что бросок нужен вообще. Это реальный ответ = \ –

Смежные вопросы