只允许GWT中的文本框中的数字?

use*_*403 22 gwt

我有一个要求,我只需要在文本框中允许数字.如果用户尝试输入除数字以外的任何其他字符,则我们需要取消该事件.请帮我怎么做到这一点?

谢谢!

小智 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验证框架非常满意.

  • 没有使用GWT ValueBox <Number>,DoubleBox,IntegerBox或LongBox以及所有验证,格式化和I18N支持的任何特殊原因! (7认同)
  • 退格会使用这个..并使用Tab键导航..? (2认同)
  • `LongBox` 似乎允许你在默认情况下在文本字段中输入乱码,至少在 2.5.1 中是这样。如果有提供此功能的开箱即用的东西,那就太好了。 (2认同)

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)

  • 如何处理退格键和制表键? (5认同)

tum*_*udu 7

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)


Bla*_*har 5

我添加了其他例外,例如复制号码的可能性。它仍然可以防止剪贴板中的内容粘贴。

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)