2011-12-02 59 views
-1

我已将BasicEditField添加到GridFieldManager。当我测试它时,它允许输入值如11.11.11。我如何让我的BasicEditField只接受正确的双数字,如101.1123.123。也就是说,只允许一个小数点。如何将BasicEditField设置为接受点分十进制数

gfm = new GridFieldManager(1, 2, 0); 
    gfm.add(new LabelField(" Enter value : ")); 
    bef = new BasicEditField(BasicEditField.NO_NEWLINE|BasicEditField.FILTER_REAL_NUMERIC); 
    bef.setFilter(TextFilter.get(NumericTextFilter.REAL_NUMERIC)); 
    bef.setFilter(TextFilter.get(TextFilter.REAL_NUMERIC)); 
    bef.setText("1"); 
    bef.setMaxSize(8); 
    gfm.add(bef); 
    add(gfm); 

我已经尝试了一切,我可以。但问题还在我的应用程序中。任何人都可以给我一个适当的方式来设计一个输入字段接受十进制数字?

+0

什么是错误的表现? –

+0

实际上我已经给了我自己的editfield。现在它几乎可以正常工作。但我仍然有一个问题,当我使用相同的BasicEditField时,我遇到了问题。它接受像“1.1.1.1”这样的值。但我想让自己的领域接受正确的浮点值。如“1.1111”或1000.1“,只需一个”。“字符,我该怎么做到这一点? –

回答

0

最终我得到了一个论坛的解决方案(忘了复制链接)..

这里是......

我的课堂我里面把变量...

private int maxIntDigits = -1; 
private int maxFractDigits = -1; 
private String old; 

我增加了一个BasicEditField,BEF ..

bef = new BasicEditField("","1"); 
bef.setMaxSize(8); 
bef.setChangeListener(this); 
add(bef); 

然后在它的fieldChanged()中。

public void fieldChanged(Field field, int context) 
{ 
if(field==bef) 
     { 
      String str = bef.getText(); 
      if(str.equals("")) 
      { 
       old = ""; 
       //return; 
      } 
      if(str.indexOf('.') == str.lastIndexOf('.')) 
      { 
       if(str.indexOf('-') >= 0) 
       { 
        bef.setText(old); 
       } 
       if(validateIntPart(str) && validateFractPart(str)) 
       { 
        old = str; 
        //return; 
       } 
       else 
       { 
        bef.setText(old); 
       } 
      } 
      else 
      { 
       bef.setText(old); 
       //return; 
      } 
} 

}在它

,然后两个功能......

private boolean validateIntPart(String str) { 
     if(maxIntDigits == -1) { 
      return true; //no limit has been set 
     } 
     int p = str.indexOf('.'); 
     if(p == -1) { 
      p = str.length(); 
     } 
     int digits = str.substring(0, p).length(); 
     if(digits > maxIntDigits) { 
      return false; 
     } else { 
      return true; 
     } 
    } 

    private boolean validateFractPart(String str) { 
     if(maxFractDigits == -1) { 
      return true; //no limit has been set 
     } 
     int p = str.indexOf('.'); 
     if(p == -1) { 
      return true; //if no '.' found then the fract part can't be too big 
     } 
     int digits = str.substring(p + 1, str.length()).length(); 
     if(digits > maxFractDigits) { 
      return false; 
     } else { 
      return true; 
     } 
    }   
2

请将所有对象添加到主屏幕add(field);。 然后尝试获取该字段的值。

现在在你的代码放在

String s = bef.getText(); 
Dialog.alert(s); 

add(gfm); 

要接受像1.1111号。 然后在BasicEditField构造函数添加

BasicEditField.FILTER_REAL_NUMERIC 

现在我认为你有你的解决方案。

+0

你有没有得到你的解决方案.... ???? –

+0

没有亲爱的仍然有它现在我即将建立自己的 –

+0

我已经添加了BasicEditField.FILTER_REAL_NUMERIC。但是我的编辑字段仍然接受像1.1.1这样的输入,我该如何克服这个问题? –

相关问题