【问题标题】:How to Prevent adding another Dot in Java Calculator如何防止在 Java 计算器中添加另一个点
【发布时间】:2014-04-18 17:02:10
【问题描述】:

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

【问题讨论】:

标签: java swing user-interface jtextfield calculator


【解决方案1】:

而不是获取“。”的计数。每一次,这里都有一个有效的方法来做到这一点

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

【讨论】:

  • 不要在文本组件上使用KeyListener,当您使用Document 字段时,这些可能会导致突变异常。也不能保证会引发事件的顺序,这意味着击键可能会在它到达您的侦听器之前被消耗掉,或者击键可能已经应用于字段文档,从而使其冗余。
【解决方案2】:

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

请参阅Text Component Features,尤其是Implementing a Document Filter 了解更多详情和these examples

不要在文本组件上使用KeyListener,当您使用Document 字段时,这些可能会导致突变异常。也不能保证会引发事件的顺序,这意味着击键可能会在到达您的侦听器之前被消耗掉。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多