倾世子风 2017-12-05 14:43 采纳率: 25%
浏览 4532
已采纳

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

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

图片说明

  • 写回答

4条回答

  • 小優YoU 2017-12-25 06:22
    关注

    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
    
        }
    });
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决