JAVA ЗАмена запятой на точку, на ходу в JTEXTField

Подскажите, есть JtextField пользователь вводит в него число, и во время ввода в JTextPane отображается уже результат. Число вводится десятичное и если пользователь вводит запятую как разделитель, программа выдает ошибку, как запретить вводить запятую заменив ее на точку на ходу в JTextField. И можно ли как-то запретить вводить любые буквенные символы? Пробую сделать так:

    admixture.getDocument().addDocumentListener(new DocumentListener() {

        public void changedUpdate(DocumentEvent arg0) {
            String str = admixture.getText().replaceAll(",","."); 
            admixture.setText(str);
            admixtureP.setText(String.valueOf(Double.parseDouble(admixture_mineral.getText())*2));

        }

        public void insertUpdate(DocumentEvent arg0) {
            String str = admixture.getText().replaceAll(",","."); 
            admixture.setText(str);
            admixtureP.setText(String.valueOf(Double.parseDouble(admixture_mineral.getText())*2));
             

        }

        public void removeUpdate(DocumentEvent arg0) {
            String str = admixture.getText().replaceAll(",","."); 
            admixture.setText(str);
            admixtureP.setText(String.valueOf(Double.parseDouble(admixture_mineral.getText())*2));
             
        }
    });

Выдает Attempt to mutate in notification


Ответы (1 шт):

Автор решения: Perfect Voyage

Если в двух словах, то проще всего повесить Listner, а проверку на число использовать при помощи парсинга стандартными средствами.

JTextField fff = new JTextField();
        fff.addActionListener(e->{
            if(fff.getText().contains(",")){
                // YourAction of Error
            }
            try { Double.parseDouble(fff.getText());}
            catch (Exception ex){
                // YourAction of Error
            }
        });
→ Ссылка