Это, неправильно заданный вопрос - вы должны спросить, как уведомить родительский компонент.
Ниже у вас есть два примера, показывающих, как достичь ваших целей. Эта первая реализация делает то, что предлагает Jens Janssons на форуме vaadin, вы передаете ClickListener на вторую панель в качестве параметра конструктора. Обратите внимание, что для того, чтобы удалить компонент с внешней панели, вам нужна ссылка как на внешнюю панель, так и на внутреннюю панель. В этом примере Ким Лаппанен хранил ссылки в переменных класса. Обратите внимание, что на самом деле используется HorizontalLayout для того, что вы называете своей «панелью», вы можете изменить его.
public class TestcaseApplication extends Application implements ClickListener {
private static final long serialVersionUID = 75232258896642392L;
private final HorizontalLayout mainLayout = new HorizontalLayout();
private final YourPanel panel = new YourPanel(this);
@Override
public void init() {
setTheme("example");
Window mainWindow = new Window("Playground Application");
setMainWindow(mainWindow);
mainWindow.setContent(mainLayout);
mainLayout.addComponent(panel);
}
public void buttonClick(ClickEvent event) {
mainLayout.removeComponent(panel);
}
public class YourPanel extends Panel {
public YourPanel(ClickListener listener) {
super();
addComponent(new Button("Remove", listener));
}
}
}
Другой пример - реализация ClickListener непосредственно на внутренней панели. В методе buttonClick я просто вызываю getParent () (возвращает макет out), а затем удаляет себя из этого макета.
public class TestcaseApplication extends Application {
private static final long serialVersionUID = 75232258896642392L;
@Override
public void init() {
setTheme("example");
Window mainWindow = new Window("Playground Application");
setMainWindow(mainWindow);
HorizontalLayout mainLayout = new HorizontalLayout();
mainWindow.setContent(mainLayout);
mainLayout.addComponent(new YourPanel());
}
public class YourPanel extends Panel implements ClickListener {
public YourPanel() {
super();
addComponent(new Button("Remove", this));
}
public void buttonClick(ClickEvent event) {
((ComponentContainer) getParent()).removeComponent(this);
}
}
}