基础的东西还是很重要的。看的时候觉得简单,都能看明白;用的时候问题就出来了,这是以前写过的一段代码,当时是抄书来的,觉得能理解能看明白,现在是自己亲自来写,却费了很多周折。不过,拼拼凑凑,几经修改,模样还是有了。请看代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.SwingConstants; public class cj extends JFrame implements ActionListener { /** * @param args */ JLabel jlkm,jlrs,jlts,jlxh,jlname,jlcj;//科目,人数,提示,学号,姓名,成绩 JTextField jtkm,jtrs;//科目,人数 JButton jbqr,jbok,jbclose;//确认,确定,关闭 JPanel jp1,jp2,jp3; JTextField jtxh[],jtname[],jtcj[];//学号,姓名,成绩数组 JScrollPane jsp;//滚动面板 Container ct; String km; int rs,yx=0,lh=0,jg=0,bjg=0; double zg,zd,sum=0; BigDecimal pj; public cj() { super("学生成绩录入"); //setVisible(true); setSize(500, 400); setResizable(false); setLayout(new BorderLayout()); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setLocationRelativeTo(null); jlkm=new JLabel("考试科目:"); jlrs=new JLabel("考试人数:"); jlts=new JLabel("每一行都必须输入成绩(非负整数)!"); jlxh=new JLabel("序号"); jlname=new JLabel("姓名"); jlcj=new JLabel("成绩"); jtkm=new JTextField(12); jtrs=new JTextField(10); jbqr=new JButton("确认"); jbok=new JButton("开始统计"); jbclose=new JButton("关闭"); jtxh=new JTextField[50]; jtname=new JTextField[50]; jtcj=new JTextField[50]; jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); jsp=new JScrollPane(jp2); ct=getContentPane(); jtkm.setText("JAVA程序设计"); jtrs.setText("1"); jbok.setEnabled(false); jbqr.addActionListener(this); jbclose.addActionListener(this); jbok.addActionListener(this); jp1.add(jlkm); jp1.add(jtkm); jp1.add(jlrs); jp1.add(jtrs); jp1.add(jbqr); ct.add(jp1,BorderLayout.NORTH); jp2.setLayout(new GridLayout(51, 3)); jp2.add(jlxh); jp2.add(jlname); jp2.add(jlcj); for (int i=0;i<=49;i++) { jtxh[i]=new JTextField(""+(i+1)); jp2.add(jtxh[i]); jtname[i]=new JTextField("姓名"); jp2.add(jtname[i]); jtcj[i]=new JTextField(""+0); jp2.add(jtcj[i]); jtxh[i].setEnabled(false); jtxh[i].setEditable(false); jtname[i].setEditable(false); jtcj[i].setEditable(false); } //jsp.setViewportView(jp2); ct.add(jsp,BorderLayout.CENTER); jp3.add(jlts); jp3.add(jbok); jp3.add(jbclose); ct.add(jp3,BorderLayout.SOUTH); } public static void main(String[] args) { // TODO Auto-generated method stub JFrame hh=new cj(); hh.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub boolean jb=true; if(e.getSource()==jbqr) { if(jtkm.getText().trim().length()>0&&!jtkm.getText().equals("请输入科目")) { if(!isnumeric(jtrs.getText())) {jtrs.setText("请输入正整数");jtrs.requestFocus();jtrs.selectAll();jbok.setEnabled(false);} else if(Integer.valueOf(jtrs.getText())<=0||Integer.valueOf(jtrs.getText())>50) {jtrs.setText("人数越界");jtrs.requestFocus();jtrs.selectAll();jbok.setEnabled(false);} else { km=jtkm.getText().trim(); rs=Integer.valueOf(jtrs.getText()); for(int i=0;i<=Integer.valueOf(jtrs.getText());i++) { jtxh[i].setBackground(Color.YELLOW); jtname[i].setBackground(Color.YELLOW); jtcj[i].setBackground(Color.YELLOW); jtxh[i].setEnabled(true); jtname[i].setEditable(true); jtname[i].setText("姓名"); jtcj[i].setEditable(true); jtcj[i].setText("0"); } for(int j=Integer.valueOf(jtrs.getText());j<=49;j++) { jtxh[j].setBackground(Color.LIGHT_GRAY); jtname[j].setBackground(Color.LIGHT_GRAY); jtcj[j].setBackground(Color.LIGHT_GRAY); jtxh[j].setEnabled(false); jtname[j].setEditable(false); jtcj[j].setEditable(false); jbok.setEnabled(true); jtname[j].setText("姓名"); jtcj[j].setText("0"); } } } else {jtkm.setText("请输入科目");jtkm.requestFocus();jtkm.selectAll();jbok.setEnabled(false);} } else if (e.getSource()==jbclose) {this.dispose();} else if(e.getSource()==jbok) { for(int b=0;b<rs;b++) { if (!isnumeric(jtcj[b].getText())||jtcj[b].getText().trim().length()<1) { JOptionPane.showConfirmDialog(null, "成绩必须为非负整数,请检查后重新输入!","输入错误",JOptionPane.CLOSED_OPTION); jb=false; break; } else {jb=true;} } if (jb) { for(int l=0;l<rs;l++) { sum=sum+Double.parseDouble(jtcj[l].getText()); if(Double.parseDouble(jtcj[l].getText())>=90) {yx=yx+1;} else if(Double.parseDouble(jtcj[l].getText())<90&&Double.parseDouble(jtcj[l].getText())>=80) {lh=lh+1;} else if(Double.parseDouble(jtcj[l].getText())<80&&Double.parseDouble(jtcj[l].getText())>=60) {jg=jg+1;} else if(Double.parseDouble(jtcj[l].getText())<60) {bjg=bjg+1;} } zg=Double.parseDouble(jtcj[0].getText()); zd=Double.parseDouble(jtcj[0].getText()); for(int k=0;k<rs-1;k++) { if(zg<Double.parseDouble(jtcj[k+1].getText())) {zg=Double.parseDouble(jtcj[k+1].getText());} if(zd>Double.parseDouble(jtcj[k+1].getText())) {zd=Double.parseDouble(jtcj[k+1].getText());} } pj=new BigDecimal(sum/rs); pj=pj.setScale(2, BigDecimal.ROUND_HALF_UP); cjj ok=new cjj(); ok.setVisible(true); sum=0;zg=0;zd=0;pj=null;yx=0;lh=0;jg=0;bjg=0; } } } class cjj extends JFrame { JLabel jkm,jrs,jzg,jzd,jpj,jyx,jlh,jjg,jbjg; JTextField tkm,trs,tzg,tzd,tpj,tyx,tlh,tjg,tbjg; public cjj() { super("学生成绩统计结果表"); setSize(600, 100); setVisible(false); setLocationRelativeTo(null); setLayout(new GridLayout(3,6)); setResizable(false); setDefaultCloseOperation(DISPOSE_ON_CLOSE); jkm=new JLabel("考试科目:",JLabel.RIGHT); jrs=new JLabel("考试人数:",JLabel.RIGHT); jzg=new JLabel("最高分:",JLabel.RIGHT); jzd=new JLabel("最低分:",JLabel.RIGHT); jpj=new JLabel("平均分:",JLabel.RIGHT); jyx=new JLabel("优秀人数:",JLabel.RIGHT); jlh=new JLabel("良好人数:",JLabel.RIGHT); jjg=new JLabel("及格人数:",JLabel.RIGHT); jbjg=new JLabel("不及格人数:",JLabel.RIGHT); tkm=new JTextField(10);tkm.setText(km); trs=new JTextField(10);trs.setText(String.valueOf(rs)); tzg=new JTextField(10);tzg.setText(String.valueOf(zg)); tzd=new JTextField(10);tzd.setText(String.valueOf(zd)); tpj=new JTextField(10);tpj.setText(String.valueOf(pj)); tyx=new JTextField(10);tyx.setText(String.valueOf(yx)); tlh=new JTextField(10);tlh.setText(String.valueOf(lh)); tjg=new JTextField(10);tjg.setText(String.valueOf(jg)); tbjg=new JTextField(10);tbjg.setText(String.valueOf(bjg)); Container cc=getContentPane(); cc.add(jkm);cc.add(tkm);cc.add(jrs);cc.add(trs);cc.add(jpj);cc.add(tpj); cc.add(jzg);cc.add(tzg);cc.add(jzd);cc.add(tzd);cc.add(jyx);cc.add(tyx); cc.add(jlh);cc.add(tlh);cc.add(jjg);cc.add(tjg);cc.add(jbjg);cc.add(tbjg); } } public boolean isnumeric(String str){ Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); if( !isNum.matches() ){ return false; } return true; } }