2016-04-11 21 views
2

EditTextにNumbers(0-9)を入力し、キーボードの他のすべての文字を入力できるようにする必要があります。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

regexを使用できますか? – bhansa

+0

"次のコードは機能しません"どのように機能しないのですか?正確に何をすることが期待されているのですか?代わりに何をしていますか? – FredK

+0

0-9の範囲の数字以外のすべての文字を許可する必要があります。アルファベット、特殊文字、中国語などを許可する必要があります。 – chiranjib

答えて

0

ちょうどすべての桁を置き換えるために正規表現を使用します。

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

は、ユーザーが入力を入力されたとして、それを実行したい場合は、すべてのアクションイベントの後、次に入力だけこの文。

1

あなたはあなただけにあなたの状態を更新する必要があり

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

あなたは '!Character.isLetter()'をやりたくないですか? –

1

比較することisLetter()メソッドを使用することができますトリックを行う必要があります

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. 
    } 
} 

他のコメントをお待ちしています。

関連する問題