Ich versuche eine Google Web Toolkit (GWT) -Anwendung zu erstellen, die auch Google Gears verwendet, aber jedes Mal, wenn ich versuche, das Panel zu entfernen, erhalte ich eine Ausnahme und das Panel bleibt dort.Ein generiertes Panel in GWT entfernen, nachdem auf eine Schaltfläche geklickt wurde
Hier ein Auszug aus der Ausnahme ist, ich (ich nur die entsprechenden Bits des Call-Stack enthalten haben, senkt sich der Rest ist nur in der mitgelieferten Funktion unten):
java.lang.AssertionError: A widget that has an existing parent widget may not be added to the detach list
at com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose(RootPanel.java:122)
at com.google.gwt.user.client.ui.RootPanel.get(RootPanel.java:197)
Ich bin nicht sicher Was das Problem ist, aber ich mag es wirklich nicht, den Knopf dort zu lassen, nachdem sie die Verwendung von Gears genehmigt haben.
Was mache ich falsch? Oder irgendwelche Vorschläge zu einer anderen Art, wie ich das tun könnte, damit es funktioniert?
if(!gearsFactory.hasPermission()) {
HorizontalPanel rightPanel = new HorizontalPanel();
rightPanel.getElement().setId("gearsPrompt");
rightPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
rightPanel.setSpacing(0);
rightPanel.setHeight("28px");
InlineLabel enableGearsText = new InlineLabel("Enable Gears for off-line access");
enableGearsText.getElement().setId("gearsText");
enableGearsText.addStyleName("titleElement");
rightPanel.add(enableGearsText);
final Button gearsButton = new Button("Use Gears");
gearsButton.getElement().setId("gearsButton");
gearsButton.addStyleName("titleElement");
gearsButton.setHeight("24px");
gearsButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
Factory gearsFactory = Factory.getInstance();
if(gearsFactory != null) {
if(gearsFactory.getPermission()) {
RootPanel gearsPrompt = RootPanel.get("gearsPrompt");
gearsPrompt.removeFromParent();
}
}
}
});
rightPanel.add(gearsButton);
RootPanel titleBarRight = RootPanel.get("titleBarRight");
titleBarRight.add(rightPanel);
}
Leider funktioniert das nicht. Der Aufruf removeFromParent() befindet sich in einem anonymen ClickHandler-Objekt und befindet sich daher nicht im selben Bereich wie rightPanel. Danke für die Idee! – Miquella