问题比较多,不做大的改动了,现在能运行了,不知道是不是你要的
改的说明在注释里
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);
}/////////构造方法在这里结束
改的说明在注释里
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);
}/////////构造方法在这里结束
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();
}
}
{ 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
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();
}
}