小智 15
您只需验证某个事件的用户输入.它可以是例如每个击键(KeyPressEvent),当TextBox失去焦点(ValueChangeEvent)时,按下按钮(ClickEvent),依此类推.您实现了一个事件处理程序,例如KeyPressHandler,并使用TextBox注册您的实现.然后在你的处理程序中验证TextBox值,如果它包含除数字之外的其他内容,则只需从方法返回,可能以某种方式告诉用户该值无效.
像这样的东西:
final TextBox textBox = new TextBox();
textBox.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
String input = textBox.getText();
if (!input.matches("[0-9]*")) {
// show some error
return;
}
// do your thang
}
});
Run Code Online (Sandbox Code Playgroud)
如果您需要进行大量验证,您可能需要引入一些验证框架,这样可以避免大量重新发明轮子.现在可能有更好的选择,但我个人对GWT-VL验证框架非常满意.
bmo*_*ran 12
以下是更通用的方法,允许代码重用.您可以将NumbersOnly处理程序用于您希望的任何文本框(同一类).
intbox1.addKeyPressHandler(new NumbersOnly());
intbox2.addFocusHandler(new OnFocus());
//inner class
class NumbersOnly implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
if(!Character.isDigit(event.getCharCode()))
((IntegerBox)event.getSource()).cancelKey();
}
}
Run Code Online (Sandbox Code Playgroud)
class NumbersOnly implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
if (!Character.isDigit(event.getCharCode())
&& event.getNativeEvent().getKeyCode() != KeyCodes.KEY_TAB
&& event.getNativeEvent().getKeyCode() != KeyCodes.KEY_BACKSPACE){
((IntegerBox) event.getSource()).cancelKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了其他例外,例如复制号码的可能性。它仍然可以防止剪贴板中的内容粘贴。
public class NumbersOnlyKeyPressHandler implements KeyPressHandler {
@Override
public void onKeyPress(KeyPressEvent event) {
switch(event.getNativeEvent().getKeyCode()) {
case KeyCodes.KEY_TAB:
case KeyCodes.KEY_BACKSPACE:
case KeyCodes.KEY_DELETE:
case KeyCodes.KEY_LEFT:
case KeyCodes.KEY_RIGHT:
case KeyCodes.KEY_UP:
case KeyCodes.KEY_DOWN:
case KeyCodes.KEY_END:
case KeyCodes.KEY_ENTER:
case KeyCodes.KEY_ESCAPE:
case KeyCodes.KEY_PAGEDOWN:
case KeyCodes.KEY_PAGEUP:
case KeyCodes.KEY_HOME:
case KeyCodes.KEY_SHIFT:
case KeyCodes.KEY_ALT:
case KeyCodes.KEY_CTRL:break;
default:
if(event.isAltKeyDown() || (event.isControlKeyDown() && (event.getCharCode() != 'v'&& event.getCharCode() != 'V')) )
break;
if(!Character.isDigit(event.getCharCode()))
if(event.getSource() instanceof IntegerBox)
((IntegerBox)event.getSource()).cancelKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)