问题比较多,不做大的改动了,现在能运行了,不知道是不是你要的
改的说明在注释里
import java.awt.*;
import java.awt.event.*;public class Mygridbag extends Frame implements ActionListener  
//这里实现actionlistener接口,不要一个个new ActionListener
{
boolean bF[] = {false, false, false}; 
 
Button cmdSum, cmdAve, cmdOp;

Label[] lbl=new Label[5];  
TextField[] txtF = new TextField[5];
TextField txtFF;
GridBagLayout gridBagLayout;
GridBagConstraints gridBagConstraints;
int i=0;

public Mygridbag(String s)
{
     super(s);
     gridBagLayout = new GridBagLayout();
     setLayout(gridBagLayout);   
     gridBagConstraints = new GridBagConstraints();
    
lbl[0] = new Label("    语文:  ");
lbl[1] = new Label("    数学:  ");
lbl[2] = new Label("    英语:  ");
lbl[3] = new Label("    总分:  ");
lbl[4] = new Label("平均成绩:  ");

for(int i=0; i<5; i++)
{
addComponent(lbl[i], i+1, 1, 1, 1); 

 
     for(int i=0; i<5; i++)
     {
     txtF[i] = new TextField("", 10);
     }

     for(int i=0; i<3; i++)
     {
     addComponent(txtF[i], i+1, 2, 2, 1); 
     }
     addComponent(txtF[3], 4, 2, 3, 1); 
     addComponent(txtF[4], 6, 2, 3, 1); 
         
     txtFF = new TextField("", 25);  
     addComponent(txtFF, 7, 2, 4, 1); 

txtF[3].setEnabled(false);
txtF[4].setEnabled(false);
txtFF.setEnabled(false);
                             
cmdSum = new Button("总分计算");
cmdAve = new Button("计算平均分"); 
cmdOp  = new Button("学习评定");
         
     addComponent(cmdSum, 4, 3, 1, 1); 
addComponent(cmdAve, 5, 3, 1, 1); 
addComponent(cmdOp , 6, 1, 1, 1); 

cmdSum.setEnabled(false);
cmdAve.setEnabled(false);
    cmdOp.setEnabled(false);       for(i = 0; i<3; i++)
       {// 当TextField 完成输入失去焦点时,  对应的Boolean = ture.  
        // 当所有的TextField都为ture时,  Button  "总分计算" 可用. 
       txtF[i].addFocusListener(new java.awt.event.FocusAdapter() {
          public void focusLost(FocusEvent e) {
////这里用e来判断是哪个textfield失去焦点,当事件触发时,i还不知道是多少呢,不是循环执行的
           if (e.getSource()==txtF[0])         
             bF[0] = true;
            if (e.getSource()==txtF[1])
             bF[1] = true;
            if (e.getSource()==txtF[2])
             bF[2] = true;
            
            TRUE();
          }
       });
       }//for
 
       cmdSum.addActionListener(this);  //分别监听action事件
       cmdAve.addActionListener(this);
       cmdOp.addActionListener(this);
  }/////////构造方法在这里结束
        

解决方案 »

  1.   

    /////////////独立的actionPerformed方法
        public void actionPerformed(ActionEvent e) 
    {  // 若所有TextField中数据符合要求(是float, 在取值范围内), 
       // 得出结果显示在响应的文本框中; 同时另两个按钮可用.
       
       
    float F[] = new float[3];//////////////
         float sum=0;
        
         if(e.getSource()==cmdSum){  //////////求和
                                  sum=0;
       for (int i=0; i<3; i++)
       {
           if ( IsFloat( txtF[i].getText() ) )
       { 
    F[i] = (float) Float.parseFloat(txtF[i].getText() );
    if ( ! Okfloat(F[i]) )
    {
    txtF[i].setText("0");
            txtF[i].requestFocus();
            bF[i] = false;
            cmdSum.setEnabled(false);
    return;
    }
    else
    {
    sum = sum + F[i];
    }                                             
        }
        else
        {
         txtF[i].setText("0");
            txtF[i].requestFocus();
            bF[i] = false;
            cmdSum.setEnabled(false);
    return;
        }
        // 总分
        txtF[3].setEnabled(true);
        txtF[3].setText((""+sum) );
        txtF[3].setEnabled(false);
        // Button 
        cmdAve.setEnabled(true);
        cmdOp.setEnabled(true);
       }
    }

    if(e.getSource()==cmdAve){  /////////求平均
       sum=0;
       for (int i=0; i<3; i++)
       {
           if ( IsFloat( txtF[i].getText() ) )
       { 
    F[i] = (float) Float.parseFloat(txtF[i].getText() );
    if ( ! Okfloat(F[i]) )
    {
    txtF[i].setText("0");
            txtF[i].requestFocus();
            bF[i] = false;
            cmdSum.setEnabled(false);
    return;
    }
    else
    {
    sum = sum + F[i];
    }                                             
        }
        else
        {
         txtF[i].setText("0");
            txtF[i].requestFocus();
            bF[i] = false;
            cmdSum.setEnabled(false);
    return;
        }
        // 总分////////这里依然重新求了次和
                                             
        txtF[3].setEnabled(true);
        txtF[3].setText((""+sum) );
        txtF[3].setEnabled(false);
                /////如果不想再求和,就要将sum的定义放在类中,将和保留下来,把上面的求和代码去掉
        //////////////平均分
        txtF[4].setText(""+sum/3);
        // Button 
        //cmdAve.setEnabled(true);
        //cmdOp.setEnabled(true);
       }
    }

    if(e.getSource()==cmdOp){  /////////评定
       sum=0;
       for (int i=0; i<3; i++)
       {
           if ( IsFloat( txtF[i].getText() ) )
       { 
    F[i] = (float) Float.parseFloat(txtF[i].getText() );
    if ( ! Okfloat(F[i]) )
    {
    txtF[i].setText("0");
            txtF[i].requestFocus();
            bF[i] = false;
            cmdSum.setEnabled(false);
    return;
    }
    else
    {
    sum = sum + F[i];
    }                                             
        }
        else
        {
         txtF[i].setText("0");
            txtF[i].requestFocus();
            bF[i] = false;
            cmdSum.setEnabled(false);
    return;
        }
        // 总分
        txtF[3].setEnabled(true);
        txtF[3].setText((""+sum) );
        txtF[3].setEnabled(false);
        //////////////平均分
        txtF[4].setText(""+sum/3);
    /////上面依然重新求和和求平均,如果不想重做,原理同求平均值
        /////简单写了两个,怎么评定自己改把
        int avg=(int)(sum/3);
        if(avg>90)
         txtFF.setText("good");
        if(avg>80&&avg<=90)
         txtFF.setText("well");
        
        ///////////
        ///..........其他评定
        //////////
        
        
        // Button 
        //cmdAve.setEnabled(true);
        //cmdOp.setEnabled(true);
       }
    }


    }

    private boolean IsFloat(String str)   
    {
    int flag_Dec = 0;

        for(int ilen=0; ilen< (str.length()); ilen++)
        {
        if(str.charAt(ilen) == '.')
        {
           flag_Dec++;

       if(flag_Dec > 1)  
              return false;  // 只能有一个小数点
           else
              continue;
             }//if    
        
        if( str.charAt(ilen) <'0' || str.charAt(ilen)> '9')
        {
           return false;
        }   
        }//for
        
       return true;
     }//IsFloat
     
     private boolean Okfloat(float a)
     {
      if (a>=0 && a<=100)
      {
      return true;
      }
      else
      {
      return false;
      }
     }//Okfloat
     
    private void TRUE() {   
        for(int i =0; i<3; i++)  //////////////这里从0-2
        {
         if( !bF[i] )
         {
         return;
         }
        }
         cmdSum.setEnabled(true);
         return;    
        }    
               
        public void addComponent(Component c, int row, int col, 
           int nrow, int ncol)
        {
         gridBagConstraints.gridx = col;
         gridBagConstraints.gridy = row;
        
         gridBagConstraints.gridwidth = ncol;
         gridBagConstraints.gridheight = nrow;
        
         gridBagLayout.setConstraints(c, gridBagConstraints);
         add(c);
        }
        
        public static void main(String[] args)
        {
         Mygridbag mygb = new Mygridbag("学生成绩录入");
         mygb.setSize(400, 220);
         mygb.setResizable(false); 
         mygb.show();
        }
    }
      

  2.   

    ///失去焦点的方法重新写了一下,避免textfield中为空串时造成的错误       for(i = 0; i<3; i++)
           {        txtF[i].addFocusListener(new java.awt.event.FocusAdapter() {
              public void focusLost(FocusEvent e) {                float tmp=0f;
               if (e.getSource()==txtF[0]){
                 
                 if(txtF[0].getText().trim().length()>0&&IsFloat(txtF[0].getText())){
                   tmp=(float) Float.parseFloat(txtF[0].getText());
       if(!Okfloat(tmp)){
        txtF[0].setText("0");
            txtF[0].requestFocus();
            bF[0] = false;
            cmdSum.setEnabled(false); 
               }
         bF[0] = true; 
      }
      else{
        txtF[0].setText("0");
            txtF[0].requestFocus();
            bF[0] = false;
            cmdSum.setEnabled(false); 
              }
                }
                
                if (e.getSource()==txtF[1]){
                  if(txtF[1].getText().trim().length()>0&&IsFloat(txtF[1].getText())){
                   tmp=(float) Float.parseFloat(txtF[1].getText());
       if(!Okfloat(tmp)){
        txtF[1].setText("0");
            txtF[1].requestFocus();
            bF[1] = false;
            cmdSum.setEnabled(false); 
               }
         bF[1] = true; 
      }
      else{
        txtF[1].setText("0");
            txtF[1].requestFocus();
            bF[1] = false;
            cmdSum.setEnabled(false); 
              }
            }
                if (e.getSource()==txtF[2]){
                  if(txtF[2].getText().trim().length()>0&&IsFloat(txtF[2].getText())){
                   tmp=(float) Float.parseFloat(txtF[2].getText());
       if(!Okfloat(tmp)){
        txtF[2].setText("0");
            txtF[2].requestFocus();
            bF[2] = false;
            cmdSum.setEnabled(false); 
               }
         bF[2] = true; 
      }
      else{
        txtF[2].setText("0");
            txtF[2].requestFocus();
            bF[2] = false;
            cmdSum.setEnabled(false); 
              }
            }
                
                TRUE();
              }
           });
           }//for
      

  3.   

    不知道是作业需要还是什么,如果不是急着完成作业,还是把基础的练习练习再做这样比较综合的题目。也不知道你哪一部分不明白这里介绍下关于通过接口实现事件的问题,可以看下下面的例子:
    import java.awt.*;
    import java.awt.event.*;public class Mygridbag extends Frame implements ActionListener{  //声明MygridBag类实现ActionListener接口
         Button cmdSum, cmdAve, cmdOp;  //定义三个按钮
         Label dispText;                //定义一个标签       public Mygridbag(){  //构造方法
              cmdSum=new Button("求和");   //实例化组件
              cmdAve=new Button("求和平均");
              cmdOp=new Button("求等级");
              dispText=new Label("                      ");          //摆放组件
             setLayout(new FlowLayout());//设置成流式布局
              add(cmdSum);
              add(cmdAve);
              add(cmdOp);
              add(dispText);
    //分别声明这些按钮监听action事件,当在这些按钮上点击时,都会执行actionPerformed方法(在后面定义),不声明监听就不会有响应    
    //参数很重要,代表实现actionListener的类,这里是Mygridbag类实现的,所以用this
           cmdSum.addActionListener(this);  
           cmdAve.addActionListener(this);
           cmdOp.addActionListener(this);
     
             //显示frame
              setSize(400,400);
              setVisible(true);
         }     //因为Mygridbag声明实现actionlistener类,所以要重写下面的方法:
         public void actionPerformed(ActionEvent e){
               //由于三个按钮点击后都会执行这个方法,所以要通过e.getSource()来区分是哪个按钮
               if(e.getSource()==cmdSum)
                 dispText.setText("这是求和");           if(e.getSource()==cmdAve)
                   dispText.setText("这是求平均");           if(e.getSource()==cmdOp)
                   dispText.setText("这是求等级");
         }    public static void main(String arg[]){
              Mygridbag mg=new Mygridbag();
        }
    }