要完成一个学习成绩输入框, 我先用普通的Java程序进行实现.
唯一问题是, 布局管理器选择不当, 造成排版问题.
该如何改进, 使用哪种管理器实现 Label 和TextField 的下线对齐
要将这段程序进行改写成Applet形式, 该何从下手.
在init()中对控件进行创建和添加监听. 作为控件操作的一部分, IsOK Isfloat 等判定函数放在哪个方法中?
Applet中start() stop() destroy() 中各自需放入哪些程序, 请高手给我必要的指点, 在此先行表示感谢. 祝您新年快乐.import java.awt.*;
import java.awt.event.*;public class Mygridbag extends Frame implements ActionListener
//这里实现actionlistener接口,不要一个个new ActionListener
{
Button cmdSum, cmdAve, cmdOp;
Label[] lbl=new Label[5];
TextField[] txtF = new TextField[5];
TextField txtFF;
GridBagLayout gridBagLayout;
GridBagConstraints gridBagConstraints; public Mygridbag(String s)
{
super(s);
gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);
gridBagConstraints = new GridBagConstraints(); //LABEL
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);
}
// TextField
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);
//BUTTON
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(true);
cmdAve.setEnabled(false);
cmdOp.setEnabled(false);
cmdSum.addActionListener(this); //分别监听action事件
cmdAve.addActionListener(this);
cmdOp.addActionListener(this);
}//构造
//独立的actionPerformed方法
public void actionPerformed(ActionEvent e)
{ // 若所有TextField中数据符合要求(是float, 在取值范围内),
// 得出结果显示在响应的文本框中; 同时另两个按钮可用.
float F[] = new float[3];
float sum=0;
int i;
if(e.getSource()==cmdSum){ // Sum
for ( sum=i=0; i<3; i++)
{
if ( IsFloat( txtF[i].getText() ) )
{
F[i] = (float) Float.parseFloat(txtF[i].getText());
if ( ! Okfloat(F[i]) )
{
Error(i);
break;
}//if
else
{
sum = sum + F[i];
}
}//if
else
{
Error(i);
break;
}
}// for
if(i == 3) // 正常退出
{ // 总分
txtF[3].setEnabled(true);
txtF[3].setText((""+sum) );
txtF[3].setEnabled(false);
// Button
cmdAve.setEnabled(true);
cmdOp.setEnabled(true);
}
}// Sum if(e.getSource()==cmdAve){ // Ave
float ave= (float)Double.parseDouble(txtF[3].getText());
txtF[4].setEnabled(true);
txtF[4].setText("" + ave/3 ); // ?? 如何做到只保留一位小数
// txtF[4].setText("" + (float(int(ave/3*10))/10.0) ); // ?? 错在哪里??
txtF[4].setEnabled(false);
} // Ave
if(e.getSource()==cmdOp){ // 评定
// ......
}
} private boolean IsFloat(String str)
{
int flag_Dec = 0;
if(str.length()==0)
{
return false;
} 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 Error(int i){
txtF[i].setText("");
txtF[i].requestFocus();
}
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();
}
}
唯一问题是, 布局管理器选择不当, 造成排版问题.
该如何改进, 使用哪种管理器实现 Label 和TextField 的下线对齐
要将这段程序进行改写成Applet形式, 该何从下手.
在init()中对控件进行创建和添加监听. 作为控件操作的一部分, IsOK Isfloat 等判定函数放在哪个方法中?
Applet中start() stop() destroy() 中各自需放入哪些程序, 请高手给我必要的指点, 在此先行表示感谢. 祝您新年快乐.import java.awt.*;
import java.awt.event.*;public class Mygridbag extends Frame implements ActionListener
//这里实现actionlistener接口,不要一个个new ActionListener
{
Button cmdSum, cmdAve, cmdOp;
Label[] lbl=new Label[5];
TextField[] txtF = new TextField[5];
TextField txtFF;
GridBagLayout gridBagLayout;
GridBagConstraints gridBagConstraints; public Mygridbag(String s)
{
super(s);
gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);
gridBagConstraints = new GridBagConstraints(); //LABEL
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);
}
// TextField
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);
//BUTTON
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(true);
cmdAve.setEnabled(false);
cmdOp.setEnabled(false);
cmdSum.addActionListener(this); //分别监听action事件
cmdAve.addActionListener(this);
cmdOp.addActionListener(this);
}//构造
//独立的actionPerformed方法
public void actionPerformed(ActionEvent e)
{ // 若所有TextField中数据符合要求(是float, 在取值范围内),
// 得出结果显示在响应的文本框中; 同时另两个按钮可用.
float F[] = new float[3];
float sum=0;
int i;
if(e.getSource()==cmdSum){ // Sum
for ( sum=i=0; i<3; i++)
{
if ( IsFloat( txtF[i].getText() ) )
{
F[i] = (float) Float.parseFloat(txtF[i].getText());
if ( ! Okfloat(F[i]) )
{
Error(i);
break;
}//if
else
{
sum = sum + F[i];
}
}//if
else
{
Error(i);
break;
}
}// for
if(i == 3) // 正常退出
{ // 总分
txtF[3].setEnabled(true);
txtF[3].setText((""+sum) );
txtF[3].setEnabled(false);
// Button
cmdAve.setEnabled(true);
cmdOp.setEnabled(true);
}
}// Sum if(e.getSource()==cmdAve){ // Ave
float ave= (float)Double.parseDouble(txtF[3].getText());
txtF[4].setEnabled(true);
txtF[4].setText("" + ave/3 ); // ?? 如何做到只保留一位小数
// txtF[4].setText("" + (float(int(ave/3*10))/10.0) ); // ?? 错在哪里??
txtF[4].setEnabled(false);
} // Ave
if(e.getSource()==cmdOp){ // 评定
// ......
}
} private boolean IsFloat(String str)
{
int flag_Dec = 0;
if(str.length()==0)
{
return false;
} 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 Error(int i){
txtF[i].setText("");
txtF[i].requestFocus();
}
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();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货