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