как манипулировать возвращаемым типом 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
спасибо .. я делаю именно ваш ответ .. но я путаю .. выбираю фильтр документа или обычный документ ... что мне выбрать? чем отличается? Спасибо .. - person anas Tasya; 13.11.2012
comment
По сути, вы можете применить DocumentFilter к любому AbstractDocument, который включает JTextField, JTextArea, JTextPane и JTextEditor (и это лишь некоторые из них), где PlainDocument является реализацией интерфейса Document для использования с обычным текстом (таким как JTextField и JTextArea) - person MadProgrammer; 13.11.2012
comment
реализация интерфейса Document для использования с простым текстом... хорошо.. спасибо.. - person anas Tasya; 13.11.2012

Вы можете выбрать DocumentFilter, предложенный @MadProgrammer. Тем не менее, будет сложно справиться с требованием иметь другое отображение в текстовом поле и при печати на консоль (потребуется дополнительный ручной анализ/форматирование).

В сочетании с требованием принимать только числа я настоятельно рекомендую смотреть на JFormattedTextField в сочетании с NumberFormat.

  • JFormattedTextField будет принимать только ввод, который может быть проанализирован NumberFormat (вы можете ввести недопустимый ввод, но он никогда не будет принят)
  • Фактическое значение (JFormattedTextField#getValue) будет Double (если вы выберете правильный формат), поэтому вы можете распечатать его идеально.

Обратите внимание, что стандартный JFormattedTextField имеет некоторые проблемы с удобством использования. Немного погуглив, вы можете найти различные улучшенные версии JFormattedTextField. Например, этот, где я нахожу единственное отсутствующее это визуальная обратная связь, когда ввод недействителен (например, сделать фон красным)

person Robin    schedule 10.11.2012
comment
спасибо, это будет полезно .. да, это сложная игра с документфильтром .. я использую много строковых форматов .. мне потребовалось 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