java - 无法在计算器中得到简化结果

标签 java applet calculator

根据我的代码,用户按下等于后,小程序应该在文本字段中显示简化的结果,但它没有这样做。

import java.awt.*;
import java.applet.*;



import java.awt.event.*;

/*

<applet code="Calculator height=300 width=300 >

</applet>

*/


import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;


public class Calculator extends Applet implements ActionListener{

Button b[]=new Button[10];

String tx="";

TextField field;

Button plus,minus,div,mul,equal;

    public void init()
{
        field=new TextField(12);

        add(field);

        for(int i=0;i<10;i++)
{
        b[i]=new Button(String.valueOf(i));

        add(b[i]);

        b[i].addActionListener(this);

        }

        plus=new Button("+");

        add(plus);

        plus.addActionListener(this);

        minus=new Button("-");

        add(minus);

        minus.addActionListener(this);

        div=new Button("/");

        add(div);

        div.addActionListener(this);

        mul=new Button("*");

        add(mul);

        mul.addActionListener(this);

        equal=new Button("=");

        add(equal);

        equal.addActionListener(this);


}//end of init


    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String msg=e.getActionCommand();

        if(msg.equals("0")){
                tx=tx+msg;      
                repaint();
                }

        if(msg.equals("1")){
                tx=tx+msg;      
                repaint();
                }

        if(msg.equals("2")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("3")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("4")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("5")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("6")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("7")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("8")){
                tx=tx+msg;      
                repaint();
                }
        if(msg.equals("+")){
            tx=tx+msg;      
            repaint();
        }
        if(msg.equals("-")){
            tx=tx+msg;      
            repaint();
        }
        if(msg.equals("*")){
            tx=tx+msg;      
            repaint();
        }
        if(msg.equals("/")){
            tx=tx+msg;      
            repaint();
        }
        if(msg.equals("=")){
            calculate(tx);
        }

    }

        public void paint(Graphics g){
            field.setText(tx);

    }

        public  void calculate(String tx){

            ScriptEngineManager factory = new ScriptEngineManager();

            ScriptEngine engine = factory.getEngineByName("JavaScript");

            Object obj = null;

            try {
            obj = engine.eval(tx);
            } catch (ScriptException ex) {
            ex.printStackTrace();
            }

             tx=obj.toString();
             repaint();

        }

}

最佳答案

在您的 calculate 方法中,您仅将结果分配给 String tx 的本地副本,您需要将其分配给类成员变量代替:

this.tx = obj.toString();
<小时/>

但是,我建议您在这里重新考虑您的设计,paint方法不应该涉及简单的功能,例如在TextField中设置文本。您可以使用 TextField#setText 来实现。

关于java - 无法在计算器中得到简化结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136951/

相关文章:

java - JOptionPane 是 否 选项

security - 签名的小程序可以与它们所源自的不同主机连接吗?

java - 如何重新绘制 JLabel?

c++ - 简单程序由于某种原因崩溃

java - for循环可以制作多行吗?

java - 我正在通过 Youtube 教程创建 map 搜索应用程序,但我的应用程序崩溃了

java - Android 工具栏菜单项保持为空

java - 模拟方法返回带有参数之一

java - 日志文件的好位置 (windows)

Javascript计算器显示没有小数点的结果