Как установить BasicEditField для приема точечных десятичных чисел - PullRequest
0 голосов
/ 02 декабря 2011

Я добавил 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);

Я перепробовал все, что мог. но проблема еще в моем приложении. Кто-нибудь может дать мне правильный способ оформления поля ввода, которое принимает десятичные числа?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2011

Взгляните на это: BasicEditField Decimal Formatter

2 голосов
/ 02 декабря 2011

Пожалуйста, добавьте все объекты на главный экран с помощью add(field);. а затем пытается получить значение этих полей.

теперь в вашем коде положите

String s = bef.getText();
Dialog.alert(s);

после

add(gfm);

и

Чтобы принять номер как 1.1111. затем добавьте

BasicEditField.FILTER_REAL_NUMERIC

in BasicEditField Конструктор.

Теперь я думаю, что вы получили свое решение.

0 голосов
/ 30 декабря 2011

наконец я получил решение для форума (забыл скопировать ссылку) ..

вот оно ...

внутри моего класса я положил переменные ...

private int maxIntDigits = -1; 
private int maxFractDigits = -1;
private String old;

я добавил BasicEditField, перед ..

bef = new BasicEditField("","1");
bef.setMaxSize(8);
bef.setChangeListener(this);
add(bef);

А затем в его полеChanged ().

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; 
        } 
    }         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...