2016-04-11 3 views
2

Мне нужно ограничить пользователя вводением чисел (0-9) в EditText и разрешить использование любого другого символа с клавиатуры.Ограничить числа от ввода в EditText

Следующий код не работает в следующих ситуациях.

Если пользователь вводит алфавит, а затем номер, текст editText становится пустым.

InputFilter withoutNumberFilter = new InputFilter() { 
    public CharSequence filter(CharSequence source, int start, int end, 
      Spanned dest, int dstart, int dend) { 
     for (int i = start; i < end; i++) { 
      if (Character.isDigit(source.charAt(i))) { 
       return ""; 
      } 
     } 
     return null; 
    } 
}; 

editText.setFilters(new InputFilter[] { withoutNumberFilter }); 
+0

Можете ли вы использовать регулярное выражение? – bhansa

+0

«Следующий код не работает» Как он не работает? Что именно вы ожидаете от этого, и что он делает? – FredK

+0

Он должен допускать все остальные символы, кроме номеров, в диапазоне 0-9. Он должен допускать алфавиты, специальные символы, китайские символы и т. Д. – chiranjib

ответ

0

Просто используйте регулярное выражение, чтобы заменить все цифры:

source = source.replaceAll("[0-9]","") 

Если вы хотите, чтобы сделать это, как пользователь вводит вход, а затем просто ввести это заявление после каждого события действия.

1

Вы можете использовать метод isLetter() для сравнения

if (!Character.isLetter(source.charAt(i))) { 
    return ""; 
} 
+0

Не хотите ли вы '! Character.isLetter()'? –

1

Вам просто нужно обновить условие:

if (!Character.isLetter(source.charAt(i)))

Это должно сделать трюк.

0

Расширение класса может помочь и реализовать слушателя. Затем вы можете повторно использовать расширенный JTextField в других Формах.

Простой пример.

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JTextField; 

public class MyJTextField extends JTextField implements KeyListener { 

    public MyJTextField() { 
     super(); 
     addKeyListener(this); 
    } 

    boolean found = false; 

    @Override 
    public void keyPressed(KeyEvent arg0) { 

     char c = arg0.getKeyChar(); 
     char[] cs = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; 

     for (int i = 0; i < cs.length; i++) { 
      if (c == cs[i]) { 
       found = true; 
       break; 
      } 
     } 
    } 

    @Override 
    public void keyReleased(KeyEvent arg0) { 

     if (found) { 
      String text = getText(); 
      setText(text.substring(0, text.length() - 1)); 
      found = false; 
     } 
    } 

    @Override 
    public void keyTyped(KeyEvent arg0) { 
     // No action. 
    } 
} 

Любые другие комментарии приветствуются.

Смежные вопросы