我已将BasicEditField添加到GridFieldManager。当我测试它时,它允许输入值11.11.11
。如何让我的BasicEditField只接受正确的双号,例如101.1
或123.123
。也就是说,只允许一个小数点。
gfm = new GridFieldManager(1, 2, 0);
gfm.add(new LabelField(" Enter value : "));
bef = new BasicEditField(BasicEditField.NO_NEWLINE|BasicEditField.FILTER_REAL_NUMERIC);
bef.setFilter(TextFilter.get(NumericTextFilter.REAL_NUMERIC));
bef.setFilter(TextFilter.get(TextFilter.REAL_NUMERIC));
bef.setText("1");
bef.setMaxSize(8);
gfm.add(bef);
add(gfm);
我曾尽我所能尝试过。但问题还在我的应用程序中。任何人都可以给我一个正确的方法来设计一个接受十进制数字的输入字段吗?
答案 0 :(得分:2)
请使用add(field);
将所有对象添加到主屏幕中。
然后试图获得那些领域的价值。
现在在您的代码中
String s = bef.getText();
Dialog.alert(s);
之后
add(gfm);
和
接受1.1111
之类的号码。
然后添加
BasicEditField.FILTER_REAL_NUMERIC
BasicEditField
构造函数中的。
现在我认为你得到了解决方案。
答案 1 :(得分:2)
答案 2 :(得分:0)
最后我得到了一个论坛的解决方案(忘了复制链接)..
这里是......
在我的班级里面我把变量......
private int maxIntDigits = -1;
private int maxFractDigits = -1;
private String old;
我添加了一个BasicEditField,bef ..
bef = new BasicEditField("","1");
bef.setMaxSize(8);
bef.setChangeListener(this);
add(bef);
然后在其fieldChanged()。
public void fieldChanged(Field field, int context)
{
if(field==bef)
{
String str = bef.getText();
if(str.equals(""))
{
old = "";
//return;
}
if(str.indexOf('.') == str.lastIndexOf('.'))
{
if(str.indexOf('-') >= 0)
{
bef.setText(old);
}
if(validateIntPart(str) && validateFractPart(str))
{
old = str;
//return;
}
else
{
bef.setText(old);
}
}
else
{
bef.setText(old);
//return;
}
}
}
然后有两个函数......
private boolean validateIntPart(String str) {
if(maxIntDigits == -1) {
return true; //no limit has been set
}
int p = str.indexOf('.');
if(p == -1) {
p = str.length();
}
int digits = str.substring(0, p).length();
if(digits > maxIntDigits) {
return false;
} else {
return true;
}
}
private boolean validateFractPart(String str) {
if(maxFractDigits == -1) {
return true; //no limit has been set
}
int p = str.indexOf('.');
if(p == -1) {
return true; //if no '.' found then the fract part can't be too big
}
int digits = str.substring(p + 1, str.length()).length();
if(digits > maxFractDigits) {
return false;
} else {
return true;
}
}