我在gwt中创建了一个自定义小部件,扩展了复合。我正在使用焦点面板。对于FocusPanel,我添加了ClickHandler。然后我添加了键盘listner。现在按下Enter键它应该触发click事件。可以任何人帮助我使用GWT中的代码触发点击事件?
focusPanel.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
// TODO call onClick() method
}
}
});
由于
答案 0 :(得分:20)
我已经完成了这段代码:
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,因为你在另一个事件处理程序中。
答案 1 :(得分:19)
我没有为点击事件做过这个,但我已经完成了这样的更改事件。
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 :(得分:15)
您也可以使用简单的JSNI方法来完成它。只需传递你的元素[例如button.getElement()]到这个方法:
public static native void clickElement(Element elem) /*-{
elem.click();
}-*/;
答案 3 :(得分:3)
如果目标是按钮,则可以调用其click()
方法。否则你可以这样做:
private void click(HasHandlers handlerSource) {
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
DomEvent.fireNativeEvent(event, handlerSource);
}
答案 4 :(得分:2)
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次点击事件。
答案 5 :(得分:2)
请注意,对于像ENTER这样的特殊键,KeyPressHandler在Firefox中不起作用,您需要使用KeyUp或KeyDown
http://code.google.com/p/google-web-toolkit/issues/detail?id=5558#c6
答案 6 :(得分:1)
也许ClickListenerCollection.fireClick()做你想做的事。我没有用过它
抱歉,这已被弃用,甚至可能没用。我想你应该看看widget.delegateEvent。
答案 7 :(得分:0)
你可以这样做:
focusPanel.fireEvent(new ClickEvent(){});