java怎么限制键盘输入只能输入数字和一个小数点?

如图 能实现输入数字和小数点,但是能输入多个小数点,代码怎么写能实现只输入一个小数点?求大神帮助~~万分感谢

图片说明

swing的话,JTextField添加监听器就可以了,代码如下

final int PRECISION = 2;    // FIXME 小数位数为2, 建议可配
final JTextField input = new JTextField();  // 输入框

// 添加监听器
input.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
        String text = input.getText();  // 当前输入框内容
        char ch = e.getKeyChar();   // 准备附加到输入框的字符

        // 限制不能输入非数字和小数点
        if(!(ch >= '0' && ch <= '9') && ch != '.') {
            e.consume();    // 销毁当前输入字符

        // 限制不能是小数点开头
        } else if("".equals(text) && ch == '.') {   
            e.consume();

        } else if(text.contains(".")){

            // 限制不能重复输入小数点
            if(ch == '.') {
                e.consume();

            // 限制小数位数
            } else {
                int idx = text.indexOf('.');
                String tmp = text.substring(idx + 1);
                if(tmp.length() >= PRECISION) { 
                    e.consume();
                }
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub

    }
});

 正则匹配

\\d+(\\,\d+)

java并不能限制键盘输入,这是驱动层的事情,java运行在虚拟机,没有这个权限。c可以通过winAPI实现,但是需要过系统保护和签名,这里就不展开了。
java要做的话,只能对键盘输入后的内容做过滤处理。如果是控制台输入。那么在提取输入流的时候,只提取你需要的字符,其他扔掉。如果是swing界面输入,如文本框,可以加对文本框组件监听器,对于不期望输入的字符,不保存且不回显到输入框,看上去就是按键无效。

兄弟你这个想法很有空间