u013653264
倾世子风
采纳率25%
2017-12-05 14:43

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

已采纳

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

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • lyy289065406 小優YoU 4年前

    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
    
        }
    });
    
    
    点赞 1 评论 复制链接分享
  • Oliver_wq 奥利弗呀 4年前

    兄弟你这个想法很有空间

    点赞 1 评论 复制链接分享
  • lyy289065406 小優YoU 4年前

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

    点赞 1 评论 复制链接分享
  • devmiao devmiao 4年前
     正则匹配
    
    \\d+(\\,\d+)
    
    点赞 评论 复制链接分享