如何关闭GWT中的窗口

时间:2012-09-29 07:51:28

标签: gwt uibinder gwt2

我被要求在GWT Composite中放置一个“完成”按钮(尽管已经有关闭图标),它应该在点击时关闭窗口。不幸的是,我找不到.close()方法来实现它。怎么办呢?

enter image description here

我有一个包含Composite组件的UserDialog类,我将其命名为UserComposite。 UserDialog扩展到CustomDialogBox,它扩展到DialogBox类:

public class UserDialog extends CustomDialogBox {    
    private UserComposite c = new UserComposite();
    // more codes here
    private FlowPanel getFlowPanel() {
        if (p instanceof Panel && c instanceof Composite) {
            p.setSize(WIDTH, HEIGHT);
            p.add(c);
        }
        return p;
    } 
}

然后这是我的UserComposite

public class UserComposite extends Composite {
   // codes here
   @UiHandler("doneButton")
   void onDoneButtonClick(ClickEvent event) {
      this.removeFromParent();
   }
}

我尝试了removeFromParent(),但UserComposite仅从父节点中删除,导致空的DialogBox。

enter image description here

2 个答案:

答案 0 :(得分:4)

@Mr。 Xymon,如果你的意思是PopupPanel的实例或PopupPanel的任何子类的实例,你可以使用以下命令:

popupPanel.hide();

答案 1 :(得分:4)

您需要隐藏对话框,而不是复合。一种方法是将对话框的引用传递给UserComposite构造函数,然后使用该引用在对话框上调用hide()。它可能是这些方面的东西:

public class UserDialog extends CustomDialogBox {
    private UserComposite c = new UserComposite(this);
    ...
}

public class UserComposite extends Composite {
    private DialogBox parentDialog;

    public UserComposite(DialogBox parentDialog) {
        this.parentDialog = parentDialog;
    }

    @UiHandler("doneButton")
    void onDoneButtonClick(ClickEvent event) {
        parentDialog.hide();
    }
}