如何使TextField只接受Codename One中的数字?

时间:2018-04-01 09:12:24

标签: java swing codenameone

由于Codename One API类似于AWT / Swing。我想获得下面代码的相同结果,但使用Codename One:

    private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {

        char c = evt.getKeyChar();

        if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || 
            c == KeyEvent.VK_DELETE)) {

        getToolkit().beep();
        evt.consume();
       }
}

这实际上是一个TextField,它只通过限制输入类型来接受数字。如何在Codename One中制作类似的东西?

OBS:我想限制数字的输入类型。

到目前为止我的代码:

public void keyPressed(final TextField current) {

        current.addDataChangedListener((i, ii) -> {
            if(isValidInput(current.getText())) {
               current.putClientProperty("LastValid", current.getText());
            } else {
               current.stopEditing();
               current.setText((String)current.getClientProperty("LastValid"));
               current.startEditingAsync();
            }
        });
    }

    public boolean isValidInput(String input){

    if(input.contains("a") || input.contains("b") || input.contains("c") 
    || input.contains("d") || input.contains("e") || input.contains("f")
    || input.contains("g") || input.contains("h") || input.contains("i")
    || input.contains("j") || input.contains("k") || input.contains("l")
    || input.contains("m") || input.contains("n") || input.contains("o")
    || input.contains("p") || input.contains("q") || input.contains("r")
    || input.contains("s") || input.contains("t") || input.contains("u")
    || input.contains("v") || input.contains("w") || input.contains("x")
    || input.contains("y") || input.contains("z")) {
        return false;
    }
    else {
        return true;
    }
}

我的isValidInput()方法似乎太长了不是吗?有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,这应该与addDataChangedListener()一起使用。请注意,这不会产生理想的用户体验,因为虚拟键盘可以有多个实现,并且由于没有密钥而无法通过关键事件工作... 这样的事情应该没问题: myTextField.addDataChangedListener((i,ii) - > {     if(isValidInput(myTextField.getText())){        lastValidInput = myTextField.getText();     } else {        myTextField.stopEditing();        myTextField.setText(lastValidInput);        myTextField.startEditingAsync();     } }); 现在这可能无法启动/停止编辑,这将导致虚拟键盘弹跳"但我不会冒险...... 如果要编写100%通用代码,则需要在类中定义String字段lastValidInput或用客户端属性替换该代码: myTextField.addDataChangedListener((i,ii) - > {     if(isValidInput(myTextField.getText())){        myTextField.putClientProperty(" LastValid",myTextField.getText());     } else {        myTextField.stopEditing();        myTextField.setText((字符串)myTextField.getClientProperty(" LastValid&#34));        myTextField.startEditingAsync();     } }); isValidInput(String)方法如果你的验证方法,你可以在那里运行任何文本,以确保文本符合你的需要,无论是数字还是其他。