Я пытаюсь использовать подокно, но либо компоненты, которые я пытаюсь вставить в него, отображаются в "главном окне", либо я получаю исключение java.lang.UnsupportedOperationException. Я покажу вам оба случая. Я хотел бы разместить HorizontalLayout во вспомогательном окне, когда мне нужно вставить некоторые реальные компоненты, а не просто метку и кнопку.
public class SubWindow extends CustomComponent {
Window mainWindow; // Reference to main window
Window myWindow; // The window to be opened
public SubWindow(Window main) {
mainWindow = main;
createWindow();
}
public void createWindow() {
myWindow = new Window("My Dialog");
HorizontalLayout layout = new HorizontalLayout();
// Add the window inside the main window.
mainWindow.addWindow(myWindow);
layout.addComponent(new Label("A label"));
layout.addComponent(new Button("Ok"));
// The composition root MUST be set
setCompositionRoot(layout);
myWindow.addComponent(layout);
}
}
Когда я запускаю это и открываю новое подокно, используя
window = new Window("Title");
setMainWindow(window);
window.addComponent(new SubWindow(window));
Я получаю
SEVERE: ошибка терминала:
com.vaadin.event.ListenerMethod $ MethodException
Причина: java.lang.UnsupportedOperationException
на com.vaadin.event.ListenerMethod.receiveEvent (ListenerMethod.java:510)
на com.vaadin.event.EventRouter.fireEvent (EventRouter.java:164)
...
Причина: java.lang.UnsupportedOperationException
на com.vaadin.ui.CustomComponent.removeComponent (CustomComponent.java:248)
at com.vaadin.ui.AbstractComponentContainer.addComponent (AbstractComponentContainer.java:207)
...
С другой стороны, если я переключаю место между setCompositionRoot (макет) и myWindow.addComponent (макет), метка и кнопка просто оказываются в главном окне вместо вновь созданного подокна.
Чего мне не хватает?