一个简单的SWT Text ip地址框

Text text = new Text();
text.addVerifyListener(new VerifyListener() {
      @Override
       public void verifyText(VerifyEvent e) {
              String ipText = getControl().getText();
              char c = e.character;
              if (c == '.') {
                    String[] segments = ipText.split("//.");
                    if (segments.length >= 4) { 
                           int pIndex = ipText.indexOf('.', e.start);
                           text.setSelection(pIndex + 1, pIndex + 1);
                           e.doit = false;
                           return;
                    }
             } else {
                    if (e.start < ipText.length()) {
                           char currChar = ipText.charAt(e.start);
                           if (currChar == '.') {
                                 // 按下"backspace"键时光标前移一位
                                 if (c == '/b') {
                                        text.setSelection(e.start, e.start);
                                        e.doit = false;
                                        return;
                                 }
      
                                 // 按下"Delete"键时光标后移一位
                                 if (c == 127) {
                                        text.setSelection(e.end, e.end);
                                        e.doit = false;
                                        return;
                                 }
      
                                 // 按下数字键时
                                 if (Character.isDigit(c)) {
                                        int point = ipText.lastIndexOf('.', e.start - 1);
                                        if (e.start - point > 3) {
                                              text.setSelection(e.start + 1, e.start + 1);
                                              e.doit = false;
                                              return;
                                        }
                                 }
                           }
                    }
                    if (Character.isDigit(c)) {
                           int fpoint = ipText.lastIndexOf('.', e.start - 1);
                           int bpoint = ipText.indexOf('.', e.start);
                           if ((bpoint > 0 && bpoint - fpoint > 3) ||
                                        (bpoint < 0 && ipText.length() - fpoint > 3)) {
                                 e.doit = false;
                                 return;
                           }
                    } else if ((c != '/b') && (c != 127) && 
                                 !(c == 0 && e.start == 0 && e.end == ipText.length())) { // 处理粘贴的问题
                           e.doit = false;
                           return;
                    } 
             }

       }

});

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值