import javax.swing.*;
package a;
import java.awt.event.*;
import java.awt.*;
public class Calculator1 extends Frame implements ActionListener {
Frame frame;
Panel panel;
TextField t;
Button[] button;
    StringBuffer str=new StringBuffer("");
    double x, y;
    int z;
     Calculator1()
     {
       frame=new Frame();
      frame.setLayout(new BorderLayout());
         MenuBar mb=new MenuBar();
         Menu menu1=new Menu("编辑(E)");
         Menu menu2=new Menu("查看(v)");
         Menu menu3=new Menu("帮助(H)");
         MenuItem mi1=new MenuItem("复制(C) Ctrl+C ");
         MenuItem mi2=new MenuItem("粘贴(V) Ctrl+V ");
         MenuItem m2=new MenuItem("退出");
         m2.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e2) 
          {  
           System.exit(0);
          } 
         });
         MenuItem mi3=new MenuItem("标准型(T)  ");
         MenuItem mi4=new MenuItem("科学型(S)  ");
         MenuItem mi5=new MenuItem("数据分组(I)  ");
         MenuItem mi6=new MenuItem("帮助主题(H)  ");
         MenuItem mi7=new MenuItem("关于计算器(A)  ");      
         String s[]={"My","love","退格","CE","C","7","8","9","+/-","sqrt","4","5","6","/","%","1","2","3","-","0","*","1/x",".","+","="};
         button=new Button[s.length];
         panel=new Panel();
         panel.setLayout(new GridLayout(5,5));
         t=new TextField("0",27);
         t.setEnabled(false); 
         for(int i=0;i<button.length;i++)
          {
        button[i]=new Button(s[i]);
        button[i].setForeground(Color.blue);
        panel.add(button[i]);
          }   
           for(int i=0;i<button.length;i++)
            {
               button[i].addActionListener(this);
             // button[i].setBackground(new Color(194,171,245));
            }
           button[0].addMouseListener(new MouseAdapter(){
            public void mouseEntered(MouseEvent e){
            button[0].setBackground(Color.cyan);
            }
           });
           button[0].addMouseListener(new MouseAdapter(){
        public void mouseExited(MouseEvent e){
        // button[0].setBackground());
        }});
         mb.add(menu1);
            mb.add(menu2);
            mb.add(menu3);
            mb.add(menu1);
            mb.add(menu2);
            mb.add(menu3);
            menu1.add(mi1);
            menu1.add(mi2);
            menu1.add(m2);
            menu2.add(mi3);
            menu2.add(mi4);
            menu2.add(mi5);
            menu3.add(mi6);
            menu3.add(mi7); 
            frame.setMenuBar(mb);
            frame.setBounds(300,300,260,370);
            frame.add(t,BorderLayout.NORTH);
            frame.add(panel,BorderLayout.CENTER);
            frame.setBackground(Color.blue);
            frame.setResizable(false);
            frame.setVisible(true);         
            frame.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e1) { 
            System.exit(0); 
              } 
              });     
             }
            public void actionPerformed(ActionEvent e2) 
          {      
            try{
            if(e2.getSource()==button[3])//CE
             {
             t.setText("0");
             str.setLength(0);
             }  
          
            else if(e2.getSource()==button[4])//C
              { 
               t.setText("0");
               str.setLength(0); 
               }   
             else if(e2.getSource()==button[8])//+/-
               { 
                x=Double.parseDouble(t.getText().trim()); 
                t.setText(""+(-x)); 
              } 
               else if(e2.getSource()==button[23])//+
                { 
                   x=Double.parseDouble(t.getText().trim()); 
                 str.setLength(0);                    y=0d; 
                   z=0; 
                 } 
                 else if(e2.getSource()==button[18])//-
                    { 
                         x=Double.parseDouble(t.getText().trim()); 
                         str.setLength(0); 
                         y=0d; 
                         z=1; 
                     } 
                 else if(e2.getSource()==button[20])//*
                     { 
                         x=Double.parseDouble(t.getText().trim()); 
                         str.setLength(0); 
                         y=0d; 
                         z=2; 
                     } 
                 else if(e2.getSource()==button[13])//           /
                      { 
                         x=Double.parseDouble(t.getText().trim()); 
                         str.setLength(0); 
                         y=0d; 
                         z=3; 
                     } 
                else if(e2.getSource()==button[24])//     =
                         { 
                     str.setLength(0); 
                           switch(z) 
                         { 
                       case 0 : t.setText(""+(x+y));break; 
                       case 1 : t.setText(""+(x-y));break; 
                       case 2 : t.setText(""+(x*y));break; 
                       case 3 : t.setText(""+(x/y));break; 
                          } 
                          }
                 else if(e2.getSource()==button[22])//      .
                          { 
                     if(t.getText().trim().indexOf('.')!=-1)
                          {                          } 
                  else
                { 
                     if(t.getText().trim().equals("0")) 
                { 
                        str.setLength(0); 
                    t.setText((str.append("0"+e2.getActionCommand())).toString()); 
               } 
                  else if(t.getText().trim().equals(""))
                  { 
                  } 
                   else 
                  {
               t.setText(str.append(e2.getActionCommand()).toString()); 
                   } 
                   } 
                        y=0d;
                  }
              else if(e2.getSource()==button[9])// sqrt
                  { 
               x=Double.parseDouble(t.getText().trim()); 
                 t.setText("数字格式异常"); 
                     if(x<0) 
                     t.setText("负数没有平方根"); 
                      else 
                t.setText(""+Math.sqrt(x)); 
                 str.setLength(0); 
                   y=0d; 
                    } 
           else if(e2.getSource()==button[14])//% 
                    { 
              x=Double.parseDouble(t.getText().trim()); 
                  t.setText(""+(0.01*x)); 
                  str.setLength(0); 
                  y=0d; 
                  } 
               else if(e2.getSource()==button[21])//  1/x
                  {            x=Double.parseDouble(t.getText().trim()); 
                  if(x==0) 
                  {
            t.setText("除数不能为零"); 
                 }
                 else 
                  { 
             t.setText(""+(1/x)); 
                  } 
             str.setLength(0); 
                y=0d; 
                   } 
                 else
              { 
             if(e2.getSource()==button[19])//0
              { 
              if(t.getText().trim().equals("0"))
               {                 } 
               else 
          { 
         t.setText(str.append(e2.getActionCommand()).toString()); 
              y=Double.parseDouble(t.getText().trim()); 
            } 
            } 
        else if(e2.getSource()==button[2])//退格
            { 
            if(!t.getText().trim().equals("0"))
             { 
         if(str.length()!=1) 
            { 
   t.setText(str.delete(str.length()-1,str.length()).toString());
           } 
            else 
           { 
                 t.setText("0"); 
              str.setLength(0); 
           }
           }
                  y=Double.parseDouble(t.getText().trim()); 
             } 
                 else
                 { 
                  t.setText(str.append(e2.getActionCommand()).toString()); 
                    y=Double.parseDouble(t.getText().trim()); 
                   }
                   }
                   }          
          catch(NumberFormatException e){ 
              t.setText("数字格式异常"); 
         }
          catch(StringIndexOutOfBoundsException a)
          {
           t.setText("字符串索引越界");
          }}
             public static void main(String[] args) {
          Calculator1 c=new Calculator1();
        
   }
}这里 StringBuffer str=new StringBuffer("");
和下面的好多个 str.setLength(0);       为什么这样设置就能把TextFile的内容清空呢?跟这个StringBuffer有什么关系呢?

解决方案 »

  1.   

    这样不能把TextField清空,是前面的setText("0");清空的
      

  2.   

    不是啊。我把下面的str.setLength(0); 注释掉就不行了。
      

  3.   

    要是stringBuffer搞不懂,这个计算器就没法写了。
    你就把StringBuffer当做可以动态分配空间就好了,通过append修改,setLength(),可以修改StringBuffer的长度。所以,如果把length变小了,就把多余的字符串截掉。还有一个方法replace 也挺好用的。顾名思义,替换。replace也可以改变 StringBuffer的长度,具体查看api。如果你想清空StringBuffer的内容,用sb.setLength(0)。
      

  4.   

    str.setLength(0)就相当于将这个字符串清空了
      

  5.   

    但是我要清空的是TextFile的内容。跟StringBuffer的length有关吗?
      

  6.   

    不知道楼主具体什么意思,如果t.setText(sb.toString()),就跟sb有关系,如果t.setText("0"),当然就跟sb没关系,感觉我们不是在讨论同一问题,对不上号。