2012-03-13 53 views
6

我想驗證文本框中輸入的數字。SWT文本驗證

我希望用戶只輸入整數,最大值和最小值之間的小數點。

我該如何確定這一點?

謝謝。

回答

3

您可以使用文本控件註冊ModifyListener並使用它來驗證數字。

txt.addModifyListener(new ModifyListener() { 

     @Override 
     public void modifyText(ModifyEvent event) { 
      String txt = ((Text) event.getSource()).getText(); 
      try { 
       int num = Integer.parseInt(txt); 
       // Checks on num 
      } catch (NumberFormatException e) { 
       // Show error 
      } 
     } 
    }); 

您也可以使用addVerifyListener來防止輸入某些字符。在傳入該方法的事件中,有一個「doit」字段。如果將其設置爲false,則會阻止當前的編輯。

11

使用VerifyListener,因爲這將處理粘貼,退格,更換.....

例如在SWT

text.addVerifyListener(new VerifyListener() { 
    @Override 
    public void verifyText(VerifyEvent e) { 
    final String oldS = text.getText(); 
    final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end); 

    try { 
     BigDecimal bd = new BigDecimal(newS); 
     // value is decimal 
     // Test value range 
    } catch (final NumberFormatException numberFormatException) { 
     // value is not decimal 
     e.doit = false; 
    } 
    } 
}); 
+0

部分表達式,如 「4E-」 應該被允許可以進入 「4E-3」 – Stefan 2016-03-17 18:13:50

3

整數驗證

text = new Text(this, SWT.BORDER); 
text.setLayoutData(gridData); 
s=text.getText(); 
this.setLayout(new GridLayout()); 
text.addListener(SWT.Verify, new Listener() { 
    public void handleEvent(Event e) { 
     String string = e.text; 
     char[] chars = new char[string.length()]; 
     string.getChars(0, chars.length, chars, 0); 
     for (int i = 0; i < chars.length; i++) { 
     if (!('0' <= chars[i] && chars[i] <= '9')) { 
      e.doit = false; 
      return; 
     } 
     } 
    } 
}); 
0

試試下面的代碼:

/** 
* Verify listener for Text 
*/ 
private VerifyListener verfyTextListener = new VerifyListener() { 
    @Override 
    public void verifyText(VerifyEvent e) { 
     String string = e.text; 
     Matcher matcher = Pattern.compile("[0-9]*+$").matcher(string); 
     if (!matcher.matches()) { 
      e.doit = false; 
      return; 
     } 
    } 
}; 
0
  • 如果你只想讓整數值,你可以使用一個微調,而不是文本的領域。

  • 對於Double值的驗證,您必須考慮像E這樣的字符可能包含在雙精度中,並且部分輸入如「4e-」在鍵入時應該是有效的。這種部分表達式將會給Double.parseDouble(partialExpression)

  • 另請參閱我的回答NumberFormatException異常在以下相關問題: How to set a Mask to a SWT Text to only allow Decimals

0

1.創建一個utill類實現驗證聽衆

2.override verifytext方法

3.實現你的邏輯

4.create utill類的對象,你要使用驗證監聽器(文本)

5.text.addverifylistener(utillclassobject)

例子: - 1. utill類: -

public class UtillVerifyListener implements VerifyListener { 

@Override 
public void verifyText(VerifyEvent e) { 

    // Get the source widget 
    Text source = (Text) e.getSource(); 

    // Get the text 
    final String oldS = source.getText(); 
    final String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end); 

    try { 
     BigDecimal bd = new BigDecimal(newS); 
     // value is decimal 
     // Test value range 
    } catch (final NumberFormatException numberFormatException) { 
     // value is not decimal 
     e.doit = false; 
    } 
} 

2。在其他類使用verifylistener的

public class TestVerifyListenerOne { 
public void createContents(Composite parent){ 

    UtillVerifyListener listener=new UtillVerifyListener(); 
    textOne = new Text(composite, SWT.BORDER); 
    textOne .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 
    textOne .addVerifyListener(listener) 

    textTwo = new Text(composite, SWT.BORDER); 
    textTwo .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 
    textTwo .addVerifyListener(listener); 

}}

0
text.addVerifyListener(new VerifyListener() { 
    @Override 
    public void verifyText(VerifyEvent e) { 
     Text text = (Text) e.getSource(); 

     final String oldS = text.getText(); 
     String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end); 

     boolean isValid = true; 

     try { 

      if(! "".equals(newS)){ 
       Float.parseFloat(newS); 
      } 

     } catch (NumberFormatException ex) { 
      isValid = false; 
     } 

     e.doit = isValid; 
    } 
});