2013-02-28 37 views
1

根據我的代碼,在用戶按下相當於小程序之後應該在文本字段中顯示簡化結果,但它不這樣做。無法在計算器中得到簡化結果

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(); 

     } 

} 

回答

2

在你calculate方法,你只將結果分配到Stringtx的本地副本,您需要將其分配給類的成員變量,而不是:

this.tx = obj.toString(); 

然而,我建議你在這裏重新考慮你的設計,paint方法不應該涉及一個簡單的功能,如設置文本在TextField。你可以使用TextField#setText

+0

+1斑點。 – 2013-02-28 13:53:48