Проверка в тексте SWT - PullRequest
       19

Проверка в тексте SWT

6 голосов
/ 13 марта 2012

Я хотел бы проверить правильность ввода чисел в текстовое поле.

Я хочу, чтобы пользователь вводил только целое число, десятичное число в поле между максимальным и минимальным значениями.

Как мне сделатьуверены в этом?

Спасибо.

Ответы [ 7 ]

11 голосов
/ 14 марта 2012

Используйте VerifyListener, так как он будет обрабатывать вставку, возврат, замену .....

Например

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;
    }
  }
});
3 голосов
/ 29 мая 2012

Проверка целочисленных значений в SWT

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;
         }
      }
   }
});
3 голосов
/ 13 марта 2012

Вы можете зарегистрировать 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, это предотвратит текущее редактирование.

0 голосов
/ 24 сентября 2017
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;
    }
});
0 голосов
/ 31 мая 2017

1.создайте класс Uitll, реализующий слушатель проверки

2. override метод проверки текста

3. Реализуй свою логику

4.создать объект класса utill, в котором вы хотите использовать верификатор прослушивания (в тексте)

5.text.addverifylistener (utillclassobject)

Пример: - 1. до класса: -

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.использование верификатора в другом классе

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 голосов
/ 17 марта 2016
  • Если вы хотите разрешить только целочисленные значения, вы можете использовать Spinner вместо текстового поля.

  • Для проверки значений Double необходимо учитывать, что такие символы, как E, могут быть включены в Double, и что частичный ввод, такой как "4e-", должен быть действительным при вводе.Такие частичные выражения приведут к NumberFormatException для Double.parseDouble (partExpression)

  • Также см. Мой ответ на следующий связанный вопрос: Как установить маску для текста SWT, чтобы разрешить толькоДесятичные дроби

0 голосов
/ 26 апреля 2014

попробуйте следующий код:

/**
 * 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;
        }
    }
};
...