代码之家  ›  专栏  ›  技术社区  ›  DonX

从GWT中的代码触发点击事件

gwt
  •  21
  • DonX  · 技术社区  · 15 年前

    我在GWT中创建了一个自定义小部件,它扩展了组合。我在其中使用了Focuspanel。对于Focuspanel,我添加了ClickHandler。然后我添加了键盘列表器。现在按Enter键,它应该触发Click事件。有人能用GWT中的代码帮助我触发Click事件吗?

    focusPanel.addKeyPressHandler(new KeyPressHandler() {
                public void onKeyPress(KeyPressEvent event) {
                    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)        {
                        // TODO call onClick() method
                    }
                }
            });
    

    谢谢

    8 回复  |  直到 10 年前
        1
  •  18
  •   DLH    15 年前

    我没有为一个点击事件做这个,但是我已经做了这样的更改事件。

    NativeEvent event = Document.get().createChangeEvent();
    DomEvent.fireNativeEvent(event, this);
    

    [ createClickEvent ( http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/dom/client/Document.html#createClickEvent(int,%20int,%20int,%20int,%20int,%20boolean,%20boolean,%20boolean,%20boolean)) 方法需要更多的参数。

    public final NativeEvent createClickEvent(int detail,
                                              int screenX,
                                              int screenY,
                                              int clientX,
                                              int clientY,
                                              boolean ctrlKey,
                                              boolean altKey,
                                              boolean shiftKey,
                                              boolean metaKey)
    
        2
  •  20
  •   Cosmin    13 年前

    我已经完成了以下代码:

    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)        {
        myButton.fireEvent( new GwtEvent<ClickHandler>() {
            @Override
            public com.google.gwt.event.shared.GwtEvent.Type<ClickHandler> getAssociatedType() {
            return ClickEvent.getType();
            }
            @Override
            protected void dispatch(ClickHandler handler) {
                handler.onClick(null);
            }
       });
    }
    

    当然,MyButton必须是最终的或公共的,因为您在另一个事件处理程序中。

        3
  •  15
  •   11101101b    12 年前

    您还可以使用一个简单的JSNI方法来完成这项工作。只需将元素[例如button.getElement()]传递给此方法:

    public static native void clickElement(Element elem) /*-{
        elem.click();
    }-*/;
    
        4
  •  2
  •   Hilbrand Bouwkamp    15 年前

    DLH描述的方法应该可以工作,除了细节参数(我不知道它是用来做什么的),您还可以在keypressevent中使用其他参数。

    另一种可能的解决方案是调用本机JavaScript click() 在元素上。我在一个按钮小部件中完成了这项工作(它作为开源软件提供)。见 点击() 以下类中的方法: http://code.google.com/p/cobogw/source/browse/trunk/widgets/src/main/java/org/cobogw/gwt/user/client/ui/Button.java ,它调用特定的Event2类,该类实现了click方法的特定于浏览器的版本。

    要使用此方法,只需添加 cobogw 到您的项目中,包括 Event.gwt.xml 并打电话 Event2.fireClickEvent(getElement()); 在您的方法中,或者只在您自己的项目中使用类event2和event中的代码

    此解决方案还允许以编程方式触发单击事件。

    还可以看看 onBrowserEvent 上面提到的button类中的实现,因为它以您想要的类似方式处理键事件,并且在您只想生成一个click事件时,可以解决多个键事件的触发问题。

        5
  •  2
  •   Carlos Aguayo    14 年前

    请注意,keypresshandler在firefox中不适用于诸如enter之类的特殊密钥,您需要使用keypup或keydown

    http://code.google.com/p/google-web-toolkit/issues/detail?id=5558#c6

        6
  •  2
  •   tamalet    11 年前

    如果目标是一个按钮,你可以调用它 click() 方法。否则,您可以这样做:

    private void click(HasHandlers handlerSource) {
      NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
      DomEvent.fireNativeEvent(event, handlerSource);
    }
    
        7
  •  1
  •   HerdplattenToni    15 年前

    也许吧 ClickListenerCollection.fireClick() 做你想做的。不过我没用过

    抱歉,这是不赞成的,甚至可能没有用。我想你应该看看widget.delegateEvent。

        8
  •  0
  •   Craigo    10 年前

    你可以这样做:

    focusPanel.fireEvent(new ClickEvent(){});