开发者

Block gwt DisclosurePanel on open state

开发者 https://www.devze.com 2023-04-12 03:59 出处:网络
How may I block a gwt DisclosurePanel on the open state ? I mean, how can I prevent this DisclosurePanel to close if the user click the header more than once ?

How may I block a gwt DisclosurePanel on the open state ?

I mean, how can I prevent this DisclosurePanel to close if the user click the header more than once ?

(My header is a textBox, I want the user to enter a text, and the panel should remain open if the user unfocus the textBox and focus newly by clicking it. The DisclosurePanel content has a "cancel" button that closes the panel)

Thank you very much.

I edit 开发者_C百科my question after 2 first answers: I would like to avoid to reopen the DisclosurePanel once closed to avoid flashing effect. I actually want to prevent the DisclosurePanel to close. Maybe sinkEvents can help me... if so, how? Thanks.


A NativePreviewHandler receives all events before they are fired to their handlers. By registering a nativePreviewHandler the first time your disclosurePanel is opened, you can cancel the click event. You can later decide to remove this handler by 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();
                }
            });
        }
    }
});


The obvious answer is review the javadoc here: https://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/DisclosurePanel.html

There is a setOpen() method that: Changes the visible state of this DisclosurePanel.

Set it to false from a click event to capture the user action.


The JavaDoc is right here: https://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/ui/DisclosurePanel.html jamesDrinkard pointed the old 1.5 javadoc.

You can use the addCloseHandler(CloseHandler<DisclosurePanel> handler) method to add a handler so when the user tries to close it you can reopen it again with setOpen().


Maybe not the best way, but it worked for me (maybe just one of both will work too):

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号