簡體   English   中英

單擊按鈕后,刪除GWT中生成的面板

[英]Remove a generated panel in GWT after a button is clicked

我試圖創建一個也使用Google Gears的Google Web Toolkit(GWT)應用程序,但是每次嘗試刪除面板時,都會出現異常,並且面板停留在該位置。

這是我得到的異常的摘錄(我只包含了調用堆棧的相關位,其余的只是進入了下面的包含的函數中):

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) 

我不確定問題出在哪里,但我真的不喜歡在他們批准使用Gears之后不放按鈕。

我究竟做錯了什么? 或有其他建議以其他方式使之起作用?

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);
}

我知道這很舊,但是...

gearsButton.addClickHandler( new ClickHandler() {
            public void onClick(ClickEvent event) {
                    Factory gearsFactory = Factory.getInstance();
                    if(gearsFactory != null) {
                            if(gearsFactory.getPermission()) {
                                   Button btn=(Button) event.getSource();
                                   btn.removeFromParent();
                            }
                    }
            }
    });

我發現的一種解決方案是遍歷“ titleBarRight”面板下的所有小部件,並刪除其中包含的所有小部件:

if(gearsFactory.getPermission()) {
    RootPanel titleBarRight = RootPanel.get("titleBarRight");
    java.util.Iterator<Widget> itr = titleBarRight.iterator();
    while(itr.hasNext()) {
        itr.next();
        itr.remove();
    }
}

但是以某種方式,這似乎仍然很棘手,而不是“正確的方法”。

你可以做 :

theParentWidget.remove(index);

第一個孩子對應於0;

是否有任何理由使用RootPanel.get("gearsPrompt").removeFromParent(); 而不是您自己的rightPanel.removeFromParent(); 參考已經在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM