【问题标题】:Backspace Button In JavaFXJavaFX中的退格按钮
【发布时间】:2019-07-02 16:15:42
【问题描述】:

我正在使用 JavaFX 制作一个计算器项目。在我的计算器中,我有一个退格键。我尝试了旧方法,如下所示:

strBuild.deleteCharAt(display.getText().length()-1);

但这不起作用,可能而且可能是因为版本。所以,我想知道是否有任何方法可以在 JavaFX 中实现或创建退格按钮。

这是我的 FXML 控制器:

@FXML
    void handleButtonAction(ActionEvent event) {

        if(start)
        {
            display.setText("");
            start = false;
        }
        else if(event.getSource() == one)
        {
            display.setText(display.getText() + "1");
        }
        else if(event.getSource() == two)
        {
            display.setText(display.getText() + "2");
        }
        else if(event.getSource() == three)
        {
            display.setText(display.getText() + "3");
        }

        //and so on

        else if(event.getSource() == dot)
        {
            display.setText(display.getText() + ".");
            dot.setDisable(true);
        }
        else if(event.getSource() == clear)
        {
            display.setText("");
            dot.setDisable(false);
        } 
        else if(event.getSource() == add)
        {
            data = Float.parseFloat(display.getText());
            operation = 1;
            display.setText("");
            dot.setDisable(false);
        }

        //and so on

        else if(event.getSource() == equals)
        {
            Float secondOperand = Float.parseFloat(display.getText());
            dot.setDisable(false);
            switch(operation)
            {
                case 1: //Addition
                    Double ans = data + secondOperand;
                    display.setText(String.valueOf(ans));
                    data = ans;
                    break;
                case 2: //Subtraction
                    ans = data - secondOperand;
                    display.setText(String.valueOf(ans));
                    data = ans;
                    break;
                case 3: //Multiplication
                    ans = data * secondOperand;
                    display.setText(String.valueOf(ans));
                    data = ans;
                    break;
                case 4: //Division
                    ans = 0d;
                    try{
                    ans = data / secondOperand;
                    }catch(Exception ex){display.setText("Error");}
                    display.setText(String.valueOf(ans));
                    data = ans;
                    break;
            }
            if(event.getSource() != divide && event.getSource() != add && event.getSource() != multi && event.getSource() != minus)
            {
                start = true;
            }
        }
        else if(event.getSource() == backspace)
        {
            // the problem
        }

    }

【问题讨论】:

  • 您应该能够执行display.setText(display.getText().substring(int beginIndex, int endIndex)) 之类的操作,因为getText() 返回String..

标签: java javafx calculator backspace


【解决方案1】:

传统的退格键只删除最后一个字符,因此您需要做的就是检查是否为display.getText().isEmpty(),如果不是,则继续删除最右边的(最后输入的字符)

else if(event.getSource() == backspace)
{
    if(!display.getText().isEmpty())
        display.setText(display.getText().substring(0,display.getText().length()-1));
}

else if(event.getSource() == backspace)
{
    if(!display.getText().isEmpty())
        display.setText(display.getText().replaceAll(".$", ""));
}

甚至

import org.apache.commons.lang.StringUtils;

...

else if(event.getSource() == backspace)
{
    if(!display.getText().isEmpty())
        display.setText(StringUtils.chop(display.getText()));
}

或者如果你想保留你的StringBuilder

else if(event.getSource() == backspace)
{
    if(!display.getText().isEmpty())
        display.setText(new StringBuilder(display.getText()).deleteCharAt(display.getText().length()-1).toString());
}

如果您忘记添加支票,您将收到StringIndexOutOfBoundsException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 2017-01-13
    • 1970-01-01
    • 2014-08-06
    • 2015-03-08
    • 2015-09-17
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多