我需要限制用户在EditText中输入Numbers(0-9)并允许键盘中的每个其他字符。
以下代码不适用于以下情况。
如果用户输入字母,然后输入数字,则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 :(得分:1)
您可以使用isLetter()
方法进行比较
if (!Character.isLetter(source.charAt(i))) {
return "";
}
答案 1 :(得分:1)
您只需将条件更新为:
if (!Character.isLetter(source.charAt(i)))
这应该可以解决问题。
答案 2 :(得分:0)
只需使用正则表达式替换所有数字:
source = source.replaceAll("[0-9]","")
如果您想在用户输入输入时执行此操作,则只需在每个操作事件后输入此语句。
答案 3 :(得分: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.
}
}
欢迎提出任何其他意见。