как да манипулирам връщания тип на jtextfield?

Имам jtext поле

когато потребителят въведе число като

123456789,10

ще се зададе автоматично в jtextfield

123,456,789.10

след това, ако потребителят щракне върху бутон, това ще стане

System.out.print(the_same_number);

това ще доведе

123456789.10

  • как да направя това?
  • как да накарам jtextfield да приема само въведено число и точка (.) и запетая (,)?

(трябва ли да използвам форматирано поле в този случай?)

Благодаря..


person anas Tasya    schedule 09.11.2012    source източник
comment
имам jtext поле Имате ли клавиш shift на клавиатурата? Ако е така, моля, използвайте го за началото на изречения и за имена на J2SE класове и т.н.   -  person Andrew Thompson    schedule 09.11.2012
comment
И така, искате да промените запетаята на десетична и след това да добавите разделители запетая? Искате ли това да се случи, докато потребителят въвежда, или когато потребителят приключи и излезе от JTextField?   -  person Alden    schedule 09.11.2012


Отговори (3)


Ще искате да използвате DocumentFilter, за да филтрирате входа, идващ в текстовото поле.

Вижте Примерите на MDP, които всъщност съдържат пример за въпроса, който задавате

person MadProgrammer    schedule 09.11.2012
comment
благодаря.. правя точно вашия отговор.. но обърквам.. избора на documentfilter или plaindocument ... какво да избера? какво по-различно от това? Благодаря .. - person anas Tasya; 13.11.2012
comment
По същество можете да приложите DocumentFilter към всеки AbstractDocument, който включва JTextField, JTextArea, JTextPane и JTextEditor (само за да назовем няколко), където PlainDocument е реализация на интерфейса Document за използване с обикновен текст (като JTextField и JTextArea) - person MadProgrammer; 13.11.2012
comment
реализация на интерфейса за документи за използване с обикновен текст ... добре.. благодаря.. - person anas Tasya; 13.11.2012

Можете да изберете DocumentFilter, както е предложено от @MadProgrammer. Въпреки това ще бъде трудно да се справим с изискването за различен дисплей в текстовото поле и при отпечатване в конзолата (ще изисква допълнително ръчно анализиране/форматиране).

В комбинация с изискването да се приемат само числа, силно препоръчвам да разгледате JFormattedTextField в комбинация с NumberFormat.

  • JFormattedTextField ще приеме само вход, който може да бъде анализиран от NumberFormat (можете да въведете невалиден вход, но той никога няма да бъде приет)
  • Действителната стойност (JFormattedTextField#getValue) ще бъде Double (ако изберете правилния формат), така че можете да го отпечатате перфектно

Имайте предвид, че стандартът JFormattedTextField има някои проблеми с използваемостта. С малко гугъл можете да намерите различни подобрени версии на JFormattedTextField. Например този, където намирам единственото липсващо нещо е визуална обратна връзка, когато въвеждането е невалидно (напр. направете фона червен)

person Robin    schedule 10.11.2012
comment
благодаря, ще е полезно .. да, трудната е игра с documentfilter.. използвам много формат на низове.. отне ми 2 дни без сън.. ~_~ .. благодаря.. - person anas Tasya; 13.11.2012

"как да накарам jtextfield да приема само въведено число и точка (.) и запетая (,)?"

    @Override
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 46 || e.KeyChar == 44){
        }
        else{
        }
    }
person static void main    schedule 09.11.2012
comment
НЕ използвайте KeyListeners за филтриране на входа в който и да е JTextComponent, редът на ключовите събития е недефиниран и ще причини изключения за мутация на документа. По-добре е да използвате DocumentFilter - KeyListeners също така не вземайте предвид неща като поставянето на текст от потребителя в полето или извикването на програмиста setText - person MadProgrammer; 10.11.2012