Vaadin: Fenster
Ich versuche, einen sub-Fenster aber entweder die Komponenten, die ich versuchen, es zeigen sich in der "mainwindow" - oder ich bekomme eine java.lang.UnsupportedOperationException. Ich zeige Ihnen, beiden Fällen. Ich würde gerne ein HorizontalLayout in der sub-Fenster, wenn ich brauche, um in einigen realen Komponenten und nicht nur ein Label und ein Button.
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);
}
}
Wenn ich diesen starte, und öffnen Sie ein neues Unterfenster mit
window = new Window("Title");
setMainWindow(window);
window.addComponent(new SubWindow(window));
Bekomme ich
SCHWERE Terminal-Fehler:
com.vaadin.event.ListenerMethod$MethodException
Ursache: java.lang.UnsupportedOperationException
bei com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
bei com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
...
Verursacht durch: java.lang.UnsupportedOperationException
bei com.vaadin.ui.CustomComponent.removeComponent(CustomComponent.java:248)
bei com.vaadin.ui.AbstractComponentContainer.addComponent(AbstractComponentContainer.java:207)
...
Auf der anderen Seite, wenn ich wechseln zwischen setCompositionRoot(layout) und MeinFenster.addComponent(layout), das Label und den Button am Ende im Hauptfenster anstatt des neu erstellten sub-Fenster.
Was bin ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
schlage ich vor, dass Sie erweitern das Fenster direkt als gehe durch ein CustomLayout. Ein layout kann nicht enthalten, ein Fenster - es geht auch Umgekehrt.
Ändern
public class SubWindow extends CustomComponent
zupublic class SubWindow extends Window
myWindow = new Window("My Dialog");
zusetCaption("My Dialog");
und
zu
setContent(layout);
Das ist der standard-Weg der Erstellung ein Fenster, genau auf die gleiche Weise erstellen Sie das main-Fenster. Ich würde auch verschieben
mainWindow.addWindow(myWindow);
außerhalb der Klasse und nicht über die mainwindow-Objekt an das Fenster, denn das ist nicht wirklich der Teil, der das Fenster-Objekt.