【问题标题】:Calculator using KeyListener JAVA使用 KeyListener JAVA 的计算器
【发布时间】:2018-02-23 09:10:49
【问题描述】:

我是编程初学者,所以请多多包涵,我正在尝试使用 KeyListener 制作一个计算器,这就是我所拥有的(剪切代码)

    public void keyPressed(KeyEvent e){
    int code = e.getKeyCode();
    System.out.println("   Code: " + KeyEvent.getKeyText(code));

    if(KeyEvent.VK_ADD == e.getKeyCode()){
        tmp = Double.parseDouble(txtDisplay.getText());
        txtDisplay.setText(display);
        add = true;

    }
    if(KeyEvent.VK_DIVIDE == e.getKeyCode()){
        tmp = Double.parseDouble(txtDisplay.getText());
        txtDisplay.setText(display);
        div = true;
    }
    if(KeyEvent.VK_SUBTRACT == e.getKeyCode()){
        tmp = Double.parseDouble(txtDisplay.getText());
        txtDisplay.setText(display);
        sub = true;
    }
    if(KeyEvent.VK_MULTIPLY == e.getKeyCode()){
        tmp = Double.parseDouble(txtDisplay.getText());
        txtDisplay.setText(display);
        mul = true;
    }
    if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE){
        txtDisplay.setText("");
        tmp = 0;
        toSolve = 0;
    }
    if(e.getKeyCode() == KeyEvent.VK_ENTER){
        toSolve = Double.parseDouble(txtDisplay.getText());
        if( add == true ){
            toSolve = tmp + toSolve;}

        else if ( sub == true  ){

            toSolve = tmp - toSolve;}

        else if ( mul == true  ){

            toSolve = tmp * toSolve;}

        else if ( div == true  ){

            toSolve = tmp / toSolve;}

    txtDisplay.setText(Double.toString( toSolve ));

    add = false ;
    sub = false ;
    mul = false ;
    div = false ;

    }


}

我希望它执行操作,但是当我运行它时,它似乎只是在做加法。我认为这可能在我的编程逻辑中。另外,如何删除文本字段中的操作符号,因为它还会转换符号,因此会引发异常。

【问题讨论】:

标签: java swing keylistener


【解决方案1】:

尝试用 keyReleased() 代替 keyPressed():

public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
        //Do something
}

Java 中的一些 Listener 存在相当多的错误,如果您不质疑其背后的原因,有时它会为您省去很多麻烦^^

【讨论】:

  • 好吧,现在我很好奇,因为这种方法通常对我有用。您将侦听器添加到框架中,但不是吗?
  • 我确实添加了它。
  • 我认为当我尝试将其转换为 double 时出现问题,因为在数字前留有一个符号(例如 /3 ),因此当我将其转换为 double 时会导致异常但随后不会当它像这样(例如-3)时发生它只是添加它
  • 那么你能进入这个方法吗?好的,然后将一些输出放在 if 子句中,您将看到您是否真的能够输入其中之一。当您能够做到这一点时,我会将您设置为 false 的条款置于注释之下。可能你总是输入那个,所以你当然总是会出错。
  • 嘿,我在所有 if 子句上添加了一个输出,它们都在做他们的工作,但它所做的仍然是添加。
猜你喜欢
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2019-08-31
  • 2012-04-19
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多