现在我有以下代码:
@UiHandler("usernameTextBox")
void onUsernameTextBoxKeyPress(KeyPressEvent event) {
keyPress(event);
}
@UiHandler("passwordTextBox")
void onPasswordTextBoxKeyPress(KeyPressEvent event) {
keyPress(event);
}
void keyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
submit();
}
}
我希望能够为视图中的所有元素只有一个侦听器,而不会为每个文本框复制一个事件。
最终目标是,如果他们按Enter键,无论他们在页面上的哪个位置,都应该提交表单。
谢谢!
答案 0 :(得分:7)
什么有效,但仍需要您为每个小部件指定它,但不需要重复的代码:
@UiHandler({"usernameTextBox", "passwordTextBox"})
void onPasswordTextBoxKeyPress(KeyPressEvent event) {
keyPress(event);
}
答案 1 :(得分:2)
是的夹套是正确的。您也可以尝试以下方法。它可能是VerticalPanel,DockLayoutPanel等......
<gwt:VerticalPanel ui:field="mainPanel">
<gwt:Label>Name</gwt:TextBox>
<gwt:TextBox ui:field="textBox">
</gwt:VerticalPanel>
@UiField
VerticalPanel mainPanel;
public Main() {
focushandler();
}
void focusHandler() {
mainPanel.addDomHandler(new Handler(), KeyPressEvent.getType());
}
final class Handler implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
//Code what you expect
}
}
实际上这有更多行。但这是一种很好的做法。
此致 Gnik
答案 2 :(得分:1)
我发现g:FocusPanel允许我捕捉面板内部所有事件。
@UiHandler("focusPanel")
void onFocusPanelKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
submit();
}
}