如何使SWT文本只能输入金额(一个小数点及数字)

来源:互联网 发布:西安电子软件学院 编辑:程序博客网 时间:2024/05/17 01:49

开发中遇到这样的问题,本来想用正则表达式解决问题,但是始终未能解决,最后采用如下办法,部分代码如下:

   //VerifyListener的位置很关键。
   text.addVerifyListener(new VerifyListener() {
    public void verifyText(VerifyEvent event) {
     // 几种情况,有初值,输入控制键,输入中文,输入字符,输入数字
     // 正整数验证
//           PatternMatcher patternMatcher = new Perl5Matcher();
//           PatternCompiler patternCompiler = new Perl5Compiler();
//           org.apache.oro.text.regex.Pattern pattern;
//           try {
//      pattern = patternCompiler.compile("//d*");
//      if (patternMatcher.matches(event.text, pattern)) {// 匹配
//       event.doit=true;
//      }else{
//       event.doit=false;
//      }
//     } catch (MalformedPatternException e) {
//      // TODO Auto-generated catch block
//      e.printStackTrace();
//     }

     //Assume you don't allow it
     event.doit = false;
     //Get the Character typed
     char myChar = event.character;
     //Allow 0~9  .
     if(text.getText().indexOf(".")==-1){//没有小数点时,可以输入小数点。(因为此验证是确保一次只能输入一个字符。)
      if (myChar=='0' || myChar=='1' || myChar=='2' || myChar=='3' || myChar=='4' || myChar=='5'|| myChar=='6' || myChar=='7' || myChar=='8' || myChar=='9' || myChar == '/b' ||myChar == '.') {
       event.doit = true;
      }
     }else{//只要有小数点,就不能输入小数点。
      if (myChar=='0' || myChar=='1' || myChar=='2' || myChar=='3' || myChar=='4' || myChar=='5'|| myChar=='6' || myChar=='7' || myChar=='8' || myChar=='9'  || myChar == '/b') {
       event.doit = true;
      }
     }
     //System.out.println("event.character:"+event.text);
//     if (myChar=='0' || myChar=='1' || myChar=='2' || myChar=='3' || myChar=='4' || myChar=='5' || myChar == '/b' ||myChar == '.') {
//       event.doit = true;
//     }
     //if (myChar=='.' && event.text.indexOf(".")==-1) event.doit = true;
     //Allow Backspace
//     MessageBox msgBox = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
//     msgBox.setText( "输入错误!" );
//     msgBox.setMessage( "你不能输入除数字和退格键以外的字符!" );
//     msgBox.open();

    }
   });

 使用SWT 有一段时间,要多对技术进行及时进行总结才有行。