Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用KeyListener JAVA的计算器_Java_Swing_Keylistener - Fatal编程技术网

使用KeyListener JAVA的计算器

使用KeyListener JAVA的计算器,java,swing,keylistener,Java,Swing,Keylistener,我是编程新手,所以请耐心听我说,我正试图用键盘监听器制作一个计算器,这就是我得到的(剪切代码) 我想让它执行操作,但当我运行它时,它似乎只是在做加法。我想这可能在我的编程逻辑中。另外,如何删除文本字段中的操作符号,因为它也会转换符号,从而引发异常。请尝试keyReleased()而不是keyPressed(): Java中的一些监听器安装了相当多的窃听器,如果您不质疑其背后的原因,有时会省去很多麻烦^^可能您使用了错误的键常量。尝试使用VK_斜杠而不是VK_除法和VK_减法而不是VK_减法运气不

我是编程新手,所以请耐心听我说,我正试图用键盘监听器制作一个计算器,这就是我得到的(剪切代码)

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

请尝试keyReleased()而不是keyPressed():


Java中的一些监听器安装了相当多的窃听器,如果您不质疑其背后的原因,有时会省去很多麻烦^^

可能您使用了错误的键常量。尝试使用
VK_斜杠
而不是
VK_除法
VK_减法
而不是
VK_减法
运气不好,不起作用。1)要尽早获得更好的帮助,请发布or。2) 另见此。它使用
ScriptEngine
来计算文本字段中的表达式。您将侦听器添加到了帧中,是吗?我添加了。我想当我尝试将其转换为double时会出现问题,因为在数字(ex./3)之前还有一个符号,所以当我将其转换为double时,会导致异常,但在类似的情况下不会发生(ex.-3)它只是增加了它,所以你能进入这个方法?好的,然后把一些输出放在if子句中,你会看到你是否真的能够输入其中的一个。当你能做到这一点时,我将该子句置于你设置为false的注释下。可能你总是输入那个,所以你总是会得到false,当然。嘿,我在所有if子句上添加了一个输出,它们都做了自己的工作,但它所做的仍然是add。
    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 ;

    }


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