簡體   English   中英

從gwt中的代碼中點擊事件

[英]Firing click event from code in gwt

我在gwt中創建了一個自定義小部件,它擴展了復合。我正在使用焦點面板。對於FocusPanel,我添加了ClickHandler。然后我添加了鍵盤listner。現在按下Enter鍵它應該觸發click事件。可以任何一個幫助我使用GWT中的代碼觸發click事件?

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

謝謝

我做了這個代碼:

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必須是final或public,因為你在另一個事件處理程序中。

我沒有為點擊事件做過這個,但我已經完成了這樣的更改事件。

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 ( createClickEvent 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)

您也可以使用簡單的JSNI方法來完成它。 只需將您的元素[例如button.getElement()]傳遞給此方法:

public static native void clickElement(Element elem) /*-{
    elem.click();
}-*/;

如果目標是按鈕,則可以調用其click()方法。 否則你可以這樣做:

private void click(HasHandlers handlerSource) {
  NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
  DomEvent.fireNativeEvent(event, handlerSource);
}

DLH描述的方法應該工作,除了詳細參數(我不知道它是什么),你有KeyPressEvent中的其他參數。

另一種可能的解決方案是在元素上調用本機JavaScript click() 我在一個Button小部件(可以作為開源)中完成了這個。 請參閱以下類中的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提供的jar文件添加到項目中,包含Event.gwt.xml並調用Event2.fireClickEvent(getElement()); 在您的方法中或僅使用您自己的項目中的類Event2和Event中的代碼

此解決方案還允許您以編程方式觸發單擊事件。

還要看一下上面提到的Button類中的onBrowserEvent實現,因為它以你想要的類似方式處理鍵事件,並解決了多個鍵事件觸發的問題,當你只想生成1個單擊事件時。

請注意,對於像ENTER這樣的特殊鍵,KeyPressHandler在Firefox中不起作用,您需要使用KeyUp或KeyDown

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

也許 ClickListenerCollection.fireClick()做你想要的。 我沒有用它

對不起,這已被棄用,甚至可能沒用。 我想你應該看看widget.delegateEvent。

你可以這樣做:

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

暫無
暫無

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

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