如何防止在Java计算器中添加另一个Dot

时间:2014-03-13 18:18:02

标签: java swing user-interface jtextfield calculator

如何阻止用户在使用java制作的计算器中添加另一个dot。 我已经有了我的JTextfield,我想阻止用户输入12.56.1而不是12.561

3 个答案:

答案 0 :(得分:0)

而不是计算“。”每一次,这都是一种有效的方式

            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) {}
        });

答案 1 :(得分:0)

如果要对文本组件进行实时验证,最好选择使用`DocumentFilter。

有关详细信息,请参见Text Component Features,特别是Implementing a Document Filterthese examples

不要在文本组件上使用KeyListener,这会在您使用字段Document进行操作时导致突变异常。订单事件也不能保证会被提出,这意味着击键可能会在它到达听众之前被消耗掉。

答案 2 :(得分:0)

使用标记防止计算器中出现多个点,例如:

    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; 
        }
        
        }
 }