Search code examples
javaswingjtextfield

Unable to enter decimal in jTextField cause of restricted to enter character


I've restricted user to enter character in jTextField but that doesn't let enter decimal.

char price = evt.getKeyChar();
        if (!Character.isDigit(price)
                || (price == KeyEvent.VK_BACKSPACE)
                || (price == KeyEvent.VK_DELETE)) {
            evt.consume();
        }  

After adding this code to jTextFieldKyeTyped() event it does let me enter only digits but not decimals.

How to get rid of it?


Solution

  • Try JFormattedField instead of character filtering. Check that working code:

    import javax.swing.*;
    import javax.swing.text.InternationalFormatter;
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    
    public class Main {
    
        public static void main(String[] args) {
    
            NumberFormat format = DecimalFormat.getInstance();
            format.setMinimumFractionDigits(1);
            format.setMaximumFractionDigits(5);
            format.setRoundingMode(RoundingMode.HALF_UP);
            InternationalFormatter formatter = new InternationalFormatter(format);
            formatter.setAllowsInvalid(false);
    
            JFormattedTextField field = new JFormattedTextField(formatter);
    
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(field);
            frame.setSize(200, 100);
            frame.setVisible(true);
        }
    }