一个简单的SWT Text ip地址框

来源:互联网 发布:期货程序化交易编程 编辑:程序博客网 时间:2024/04/29 07:56

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 0