如图 能实现输入数字和小数点,但是能输入多个小数点,代码怎么写能实现只输入一个小数点?求大神帮助~~万分感谢
swing的话,JTextField添加监听器就可以了,代码如下
final int PRECISION = 2; // FIXME 小数位数为2, 建议可配
final JTextField input = new JTextField(); // 输入框
// 添加监听器
input.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
String text = input.getText(); // 当前输入框内容
char ch = e.getKeyChar(); // 准备附加到输入框的字符
// 限制不能输入非数字和小数点
if(!(ch >= '0' && ch <= '9') && ch != '.') {
e.consume(); // 销毁当前输入字符
// 限制不能是小数点开头
} else if("".equals(text) && ch == '.') {
e.consume();
} else if(text.contains(".")){
// 限制不能重复输入小数点
if(ch == '.') {
e.consume();
// 限制小数位数
} else {
int idx = text.indexOf('.');
String tmp = text.substring(idx + 1);
if(tmp.length() >= PRECISION) {
e.consume();
}
}
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
});
正则匹配
\\d+(\\,\d+)
java并不能限制键盘输入,这是驱动层的事情,java运行在虚拟机,没有这个权限。c可以通过winAPI实现,但是需要过系统保护和签名,这里就不展开了。
java要做的话,只能对键盘输入后的内容做过滤处理。如果是控制台输入。那么在提取输入流的时候,只提取你需要的字符,其他扔掉。如果是swing界面输入,如文本框,可以加对文本框组件监听器,对于不期望输入的字符,不保存且不回显到输入框,看上去就是按键无效。
兄弟你这个想法很有空间