Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使TextField只接受代号为1的数字?_Java_Swing_Codenameone - Fatal编程技术网

Java 如何使TextField只接受代号为1的数字?

Java 如何使TextField只接受代号为1的数字?,java,swing,codenameone,Java,Swing,Codenameone,因为代码名One API类似于AWT/Swing。我希望得到与下面代码相同的结果,但使用代号1: private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) { char c = evt.getKeyChar(); if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent

因为代码名One API类似于AWT/Swing。我希望得到与下面代码相同的结果,但使用代号1:

    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();
       }
}
这实际上是一个文本字段,它仅通过限制输入类型来接受数字。如何在代号1中制作类似的东西

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()方法似乎太长了,不是吗?有什么帮助吗?

如评论中所述,这应该适用于
addDataChangedListener()
。请注意,这不会产生理想的用户体验,因为虚拟键盘可以有多个实现,并且它们不能通过按键事件工作,因为没有按键

像这样的东西应该可以:

myTextField.addDataChangedListener((i, ii) -> {
    if(isValidInput(myTextField.getText())) {
       lastValidInput = myTextField.getText();
    } else {
       myTextField.stopEditing();
       myTextField.setText(lastValidInput);
       myTextField.startEditingAsync();
    }
});
现在,如果没有启动/停止编辑,这可能会导致虚拟键盘“反弹”,但我不会冒险

如果要编写100%通用代码,则需要在类中定义字符串字段
lastValidInput
,或用客户端属性替换该代码:

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

isValidInput(String)
方法如果您使用validate方法,您可以在那里运行任何文本,以确保文本符合您的需要,无论是数字还是其他内容

嗯,从Swing的角度来看,这是一种非常非常非常糟糕的方法,使
JTextField
只接受数字-尝试将文本粘贴到字段中,看看会发生什么。任何合适的示例都会使用
文档过滤器
。这并不能回答你的问题,但希望能让你更多地思考手头的问题。这可能是一个很好的开始——有很多可用的例子。可能也是一本很好的读物。我已经看了这些例子,但这不是我要找的,因为这些都是约束条件。约束并不限制输入类型,它只是提示虚拟键盘类型。我正在寻找这样的东西:我会被诱惑去看你,甚至可以考虑看一看可能会给你一些想法的来源,非常感谢,它工作得很好。我更新了我的问题,我只是担心我的isValidInput()方法。检查它。您的方法将为:
A
&
א
和几乎所有其他字符返回true。这显然不是正确的方法。。。看见