2011-12-02 58 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這樣的輸入,我該如何克服這個問題? –

相關問題