awt?哎呀,你是想用java来做界面吗?像VB,VC,Delphi那样吗?
我搞这么久了,还没有搞过这样的java呢汗!
java在这方面没有任何优势!java的优势在于web应用。
你可以写一个jsp页面,写一个jdbc数据库连接,再写一个JavaBean。就可以了。
说实话,一百个java程序员有99个都不用java来做界面。
用java来做那些什么button,什么布局等,麻烦死了。如果你做作业的话,用vb,vc,c++builder,或delphi做好了。
如果你想学java的话,要同时学Html,jsp.
我搞这么久了,还没有搞过这样的java呢汗!
java在这方面没有任何优势!java的优势在于web应用。
你可以写一个jsp页面,写一个jdbc数据库连接,再写一个JavaBean。就可以了。
说实话,一百个java程序员有99个都不用java来做界面。
用java来做那些什么button,什么布局等,麻烦死了。如果你做作业的话,用vb,vc,c++builder,或delphi做好了。
如果你想学java的话,要同时学Html,jsp.
问题1:Label[] lbl=new Label[5];
问题2:建议不要用GridBagLayout
问题3:txtF1.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(FocusEvent e) {
.....
}
});
问题4:txtF4.setText("1233");
问题5:txtF1.setText("0");
txtF1.requestFocus();
看来偶是那100个中的那一个了?
import java.awt.event.*;public class Mygridbag extends Frame
{
boolean bF[] = {false, false, false};
Button cmdSum, cmdAve, cmdOp;
// 问题1: 如何设置控件数组, Java中有类似与VB的控件数组?
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();
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(int i = 0; i<3; i++)
{// 当TextField 完成输入失去焦点时, 对应的Boolean = ture.
// 当所有的TextField都为ture时, Button "总分计算" 可用.
txtF[i].addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(FocusEvent e) {
btxtF[i] = true;
TRUE();
}
});
}//for
cmdSum.addActionListener( new ActionListener() // 添加实现在(一个括号里)一块
{
float F[] = new float[3];
float sum=0;
public void actionPerformed(ActionEvent e)
{ // 若所有TextField中数据符合要求(是float, 在取值范围内),
// 得出结果显示在响应的文本框中; 同时另两个按钮可用.
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);
}
}
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 =1; i<4; i++)
{
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();
}
}
每段小程序都完成了, 但我不知道如何把这一块块的东西拼起来.
大家也知道, 程序是以成败论英雄的, 我忙了一下午, 真的希望还是没有结果.
所以拜托哪位大侠能帮小弟一把, 先谢了.我的设计思想是:
(语, 数, 外 三个基本输入)TextField 都有一个对应的boolean值已判断是否已有输入(有效性判断在合计时进行). 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;Button 总分(后称 B总) B平 B评定, T总, T平, T评定 可见不可选
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);
}
txtFF = new TextField("", 25);
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);
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(false);
cmdAve.setEnabled(false);
cmdOp.setEnabled(false);T(语, 数, 外) 设定失去焦点事件
txtF[i].addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(FocusEvent e) {
bF[i] = true; // 对应boolean
TRUE();
}
);
三值都键入了吗?
private void TRUE() {
for(int i =1; i<3; i++)
{
if( !bF[i] )
{
return;
}
}
cmdSum.setEnabled(true);
return;
}cmdSum 设定click 事件
判断输入框中值是否为float数
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
Y: 继续
N: 不符合的T清0, 获得焦点, 相应b=false, B总不可用
txtF[i].setText("0");
txtF[i].requestFocus();
bF[i] = false;
cmdSum.setEnabled(false); 通过 F[i] = (float) Float.parseFloat( txtF[i].gettext() ); 将String -> float判断是否在取值范围内?
private boolean Okfloat(float a)
{
if (a>=0 && a<=100)
{
return true;
}
else
{
return false;
}
}//Okfloat
Y: 继续
N: 不符合的T清0, 获得焦点, 相应b=false, B总不可用求三门总分
txtF[3].setEnabled(true);
txtF[3].setText((""+sum) );
txtF[3].setEnabled(false);
// Button 最大程度上防止误操作
cmdAve.setEnabled(true);
cmdOp.setEnabled(true); cmdSum.addActionListener( new ActionListener() // 添加实现在(一个括号里)一块
{
float F[] = new float[3];
float sum=0;
public void actionPerformed(ActionEvent e)
{ // 若所有TextField中数据符合要求(是float, 在取值范围内),
// 得出结果显示在响应的文本框中; 同时另两个按钮可用.
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);
}
}