阻止gwt DisclosurePanel处于打开状态

时间:2011-10-10 13:43:36

标签: gwt

如何在开放状态下阻止gwt DisclosurePanel?

我的意思是,如果用户多次点击标题,如何阻止此DisclosurePanel关闭?

(我的标题是一个textBox,我希望用户输入一个文本,如果用户取消对textBox的重点并通过点击它重新聚焦,面板应保持打开状态.DisclosurePanel内容有一个“取消”按钮,用于关闭面板)

非常感谢。

我在2个第一个答案之后编辑我的问题:我想避免在关闭后重新打开DisclosurePanel以避免闪烁效果。我实际上想阻止DisclosurePanel关闭。也许sinkEvents可以帮助我...如果是这样,怎么样?感谢。

4 个答案:

答案 0 :(得分:6)

NativePreviewHandler在向其处理程序触发之前接收所有事件。通过在第一次打开revealPanel时注册nativePreviewHandler,您可以取消单击事件。您可以稍后决定preventClose.removeHandler();

删除此处理程序
HandlerRegistration preventClose = null;
....
panel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
    @Override
    public void onOpen(OpenEvent<DisclosurePanel> event) {
        if (preventClose == null){
            preventClose = Event.addNativePreviewHandler(new NativePreviewHandler() {
                @Override
                public void onPreviewNativeEvent(NativePreviewEvent event) {
                    if (event.getTypeInt()==Event.ONCLICK && event.getNativeEvent().getEventTarget() == panel.getHeader().getElement().cast()) 
                        event.cancel();
                }
            });
        }
    }
});

答案 1 :(得分:0)

显而易见的答案是在这里查看javadoc:https://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/DisclosurePanel.html

有一个setOpen()方法:改变此DisclosurePanel的可见状态。

从点击事件中将其设置为false以捕获用户操作。

答案 2 :(得分:0)

JavaDoc就在这里:https://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/ui/DisclosurePanel.html jamesDrinkard指出了旧的1.5 javadoc。

您可以使用addCloseHandler(CloseHandler<DisclosurePanel> handler)方法添加处理程序,以便当用户尝试关闭它时,您可以使用setOpen()重新打开它。

答案 3 :(得分:0)

也许不是最好的方式,但它对我有用(也许其中一个也会起作用):

    dPanel.setOpen(true);

    dPanel.addOpenHandler(new OpenHandler<DisclosurePanel>() {
        @Override
        public void onOpen(OpenEvent<DisclosurePanel> event) {
            dPanel.setOpen(true);
        }
    });

    dPanel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
        @Override
        public void onClose(CloseEvent<DisclosurePanel> event) {
            dPanel.setOpen(true);
        }
    });