import java.awt.*;
import java.awt.event.*;
//界面和监听部分
public class Project1_2 extends Frame {
   static TextField tf=new TextField();//显示条
   public Project1_2(){
     this("计算器");
      }
   public Project1_2(String str){
      super(str);
      setLayout(new BorderLayout());//主面板布局
      Panel p1=new Panel();//
      GridLayout gri=new GridLayout(3,3);
      p1.setLayout(gri);
      for(int i=1;i<=9;i++){
         p1.add(new Button(String.valueOf(i)));
        (new Button(String.valueOf(i))).addActionListener(new NumberKey());
         }
         
       Panel p2=new Panel();//
       p2.setLayout(new GridLayout(1,2));
       p2.add(new Button("0"));
       p2.add(new Button("."));
       Panel p3=new Panel();//
       p3.setLayout(new GridLayout(2,2));
       p3.add(new Button("+"));
       new Button("+").addActionListener(new Slogan());//为运算符注册监听
       p3.add(new Button("-"));
       new Button("-").addActionListener(new Slogan());
       p3.add(new Button("*"));
       new Button("*").addActionListener(new Slogan());
       p3.add(new Button("/"));
       new Button("/").addActionListener(new Slogan());
     tf.setEditable(false);//设置TextField不可编辑
       Button but=new Button("=");
       new Button("/").addActionListener(new Calculate());  
      setBounds(200,200,200,200);
      setBackground(Color.blue);
      setVisible(true);
      add(tf,BorderLayout.NORTH);
      add(p1,BorderLayout.WEST);
      add(p2,BorderLayout.CENTER);
      add(p3,BorderLayout.EAST);
      add(but,BorderLayout.SOUTH);
      addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//设置主窗口关闭键可用
      }
       public static void main(String args[]){
         new Project1_2("计算器");
         }
      } 
//以下是事件处理 class NumberKey implements ActionListener {//数字键的
    int k1=1;//判断按键的次数
    static String str1,str2;//2个数字
    public void actionPerformed(ActionEvent e){
        String ss=e.getActionCommand();
        if(k1==1){
         str1=ss;
         Project1_2.tf.setText(str1);//??
         k1++;}
         else
         str2=ss;
        Project1_2.tf.setText(str2);//??
      }
      }
//运算符的
      class  Slogan implements ActionListener{
       static String str3;//保存运算符
    public void actionPerformed(ActionEvent e){      String ss=e.getActionCommand();
      if(ss.equals("+"))
       str3+="+";
       else if(ss.equals("-"))
       str3+="-";
       else if(ss.equals("*"))
       str3+="*";
       else if(ss.equals("/"))
       str3+="/";
      }
   }
//"="号的   
      class Calculate implements ActionListener{
      public void actionPerformed(ActionEvent e){
         String ss=e.getActionCommand();
         Double a=Double.valueOf(NumberKey.str1).doubleValue(),
                b=Double.valueOf(NumberKey.str2).doubleValue();//转换2个数字的形式为double型
          if(ss.equals("=")){//进行运算
            if((Slogan.str3).equals("+"))
               Project1_2.tf.setText(String.valueOf((a+b)));
            else if((Slogan.str3).equals("-"))
          Project1_2.tf.setText(String.valueOf(a-b));
            else if((Slogan.str3).equals("*"))
           Project1_2.tf.setText((String.valueOf(a*b)));
            else if((Slogan.str3).equals("/"))
            Project1_2.tf.setText(String.valueOf(a/b));   
            }  
            
         }
      }       
      
    为什么显示条TextField不能显示内容啊........事件处理的部分有问题希望大家能帮帮忙...分不是问题
    

解决方案 »

  1.   

    先排第一个错
    for(int i=1;i<=9;i++){
             p1.add(new Button(String.valueOf(i)));
            (new Button(String.valueOf(i))).addActionListener(new NumberKey());
             }在循环中,你加入到new了两个button,一个加入到面板,一个加监听,汗~~
    改为
    Button bu = null;
    for (int i = 1; i <= 9; i++) {
    bu = new Button(String.valueOf(i));

    p1.add(bu);
    bu.addActionListener(new NumberKey());
    }一会改完给你贴出来...
      

  2.   

    第二个错误在这,else后面
    忘了加括号了吧,结果进第一歌分支的出来都还要执行一下setText(str2),把已然显示的数字盖掉了if(k1==1){
             str1=ss;
             Project1_2.tf.setText(str1);
             k1++;}
             else
             str2=ss;
            Project1_2.tf.setText(str2);改为
    if(k1==1){
             str1=ss;
             Project1_2.tf.setText(str1);
             k1++;}
             else
    {
             str2=ss;
            Project1_2.tf.setText(str2);
    }代码我就不贴了,这两个地方搞定就ok,能显示...