0

How can i possibly prevent users from adding another dot in a calculator made using java. I already have my JTextfield and i want to prevent user from entering 12.56.1 instead of 12.561

mKorbel
  • 109,525
  • 20
  • 134
  • 319
user3258603
  • 149
  • 2
  • 17
  • 2
    possible duplicate of [How to validate a JTextField?](http://stackoverflow.com/questions/2749521/how-to-validate-a-jtextfield) – Eric Stein Mar 13 '14 at 18:19

3 Answers3

0

Instead of getting the count of "." each and every time, here is a efficient way of doing this

            textField.addKeyListener(new KeyListener() {
            int i=0;
            public void keyTyped(KeyEvent e) {

                        if(e.getKeyChar()=='.'){
                            if(i==1)
                                e.consume();
                            else
                                i=1;
                        }
            }

            public void keyPressed(KeyEvent keyEvent) {}

            public void keyReleased(KeyEvent keyEvent) {}
        });
RKC
  • 1,834
  • 13
  • 13
  • Do not use a `KeyListener` on text components, these can cause mutation exceptions as you fight with the fields `Document`. There is also no guarantee in the order events will be raised, meaning that it's possible for the keystroke to be consumed before it reaches your listener or the keystroke could already have been applied to the fields document, making it redundant. – MadProgrammer Mar 13 '14 at 23:04
0

If you want to do real-time validation of a text component, your best choice is to use a `DocumentFilter.

See Text Component Features, in particular Implementing a Document Filter for more details and these examples

Do not use a KeyListener on text components, these can cause mutation exceptions as you fight with the fields Document. There is also no guarantee in the order events will be raised, meaning that it's possible for the keystroke to be consumed before it reaches your listener.

MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
0

use flag for prevent multiple dots in calculator,example:

    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==sevenButton) {
            if(isCperatorClicked) {
                flag=0;
                label.setText("7");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"7");
            }
            
        }else if(e.getSource()==eightButton){
            if(isCperatorClicked) {
                flag=0;
                label.setText("8");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"8");
            }
        }else if(e.getSource()==nineButton){
            if(isCperatorClicked) {
                flag=0;
                label.setText("9");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"9");
            }
        }else if(e.getSource()==fourButton){
            
            if(isCperatorClicked) {
                flag=0;
                label.setText("4");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"4");
            }
        }else if(e.getSource()==fiveButton){
            if(isCperatorClicked) {
                flag=0;
                label.setText("5");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"5");
            }
        }else if(e.getSource()==sixButton) {
            if(isCperatorClicked) {
                flag=0;
                label.setText("6");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"6");
            }
        }else if(e.getSource()==oneButton) {
            if(isCperatorClicked) {
                flag=0;
                label.setText("1");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"1");
            }
        }else if(e.getSource()==twoButton) {
            if(isCperatorClicked) {
                flag=0;
                label.setText("2");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"1");
            }
        }else if(e.getSource()==threeButton) {
            if(isCperatorClicked) {
                flag=0;
                label.setText("3");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"3");
            }
        }else if(e.getSource()==zeroButton) {
            if(isCperatorClicked) {
                flag=0;
                label.setText("0");
                isCperatorClicked=false;
            }else {
                label.setText(label.getText()+"0");
            }
        }else if(e.getSource()==dotButton){
            if(isCperatorClicked) {
                flag=0;
                label.setText(".");
                isCperatorClicked=false;
            }else if(flag==0){
                label.setText(label.getText()+".");
                flag=1;
            }
        }else if(e.getSource()==additionButton) {
            isCperatorClicked=true;
            oldValue=label.getText();
            operator=1;
        }else if(e.getSource()==multiButton) {
            isCperatorClicked=true;
            oldValue=label.getText();
            operator=2;
        }else if(e.getSource()==minusButton) {
            isCperatorClicked=true;
            oldValue=label.getText();
            operator=3;
        }else if(e.getSource()==divisionButton){
            isCperatorClicked=true;
            oldValue=label.getText();
            operator=4;
        }else if(e.getSource()==clearButton) {
            label.setText("");
            flag=0;
        }else if(e.getSource()==equalButton) {
            flag=1;
            switch(operator) {
            case 1:
                newValue=label.getText();
                oldValueF=Float.parseFloat(oldValue);
                newValueF=Float.parseFloat(newValue);
                Result=oldValueF+newValueF;
                label.setText(Result+"");
                break;
            case 2:
                newValue=label.getText();
                float oldValueF=Float.parseFloat(oldValue);
                float newValueF=Float.parseFloat(newValue);
                float Result=oldValueF*newValueF;
                label.setText(Result+"");
                break;
            case 3:
                 newValue=label.getText();
                 oldValueF=Float.parseFloat(oldValue);
                 newValueF=Float.parseFloat(newValue);
                 Result=oldValueF-newValueF;
                label.setText(Result+"");
                break;
            case 4:
                 newValue=label.getText();
                 oldValueF=Float.parseFloat(oldValue);
                 newValueF=Float.parseFloat(newValue);
                 Result=oldValueF/newValueF;
                label.setText(Result+"");
                break; 
        }
        
        }
 }
Manu V.M
  • 1
  • 1