package 裁判评分; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class caipanJFrame extends JFrame implements ActionListener,qudiaozuigaoyuzuidifen//,WindowListener { JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JLabel b1=new JLabel("裁判人数"); TextField t1=new TextField("",7); TextField t2=new TextField("",7); JButton button1=new JButton("平均分"); JButton button2=new JButton("添加"); public caipanJFrame() { super("模拟裁判评分"); //this.setBounds(280, 100,1000, 1500); this.setSize(300, 300); this.setBackground(Color.lightGray); //this.setLayout(new GridLayout(3,1)); this.add(p1,BorderLayout.NORTH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //p1.setLayout(new GridLayout(1,3)); p1.add(b1); p1.add(t1); p1.add(button2); this.add(p2,BorderLayout.CENTER); //this.add(p3); button2.addActionListener(this); p2.setLayout(new FlowLayout()); //p3.setLayout(new GridLayout(1,2)); p3.add(button1); p3.add(t2); this.add(p3,BorderLayout.SOUTH); button1.addActionListener(this); //this.addWindowListener(this); this.setVisible(true); } public void actionPerformed(ActionEvent e) { int n; n=Integer.parseInt(t1.getText()); JTextField t[]=new JTextField[n]; if (e.getSource()==button2)//如果点击添加按钮 { int m; for(m=0;m<t.length;m++) { t[m]=new JTextField("",7); p2.add(t[m]); this.show(true); } } if (e.getSource()==button1)//如果点击平均分按钮 { int i; double shuzhi[]=new double[n]; String pingjunfen; for(i=0;i<t.length;i++) { try { shuzhi[i] = Double.parseDouble(t[i].getText()); //将文本行字符串转换成浮点数 } catch(NumberFormatException nfe) { JOptionPane.showMessageDialog(this, t[i].getText()+"字符串不能转换为浮点数请重新输入。"); } } pingjunfen=String.valueOf(qudiaozuigaoyuzuidifen(shuzhi)); t2.setText(pingjunfen); } } public void windowClosing(WindowEvent e) { System.exit(0); } public static void main(String arg[]) { new caipanJFrame(); System.out.println("c"); } public double qudiaozuigaoyuzuidifen(double a[]) { int i; double zongzhi=0; double pingjunfen; for(i=0;i<a.length;i++) { zongzhi+=a[i]; } pingjunfen=zongzhi/a.length; return pingjunfen; } @Override public double qudiaozuigaoyuzuidifen() { // TODO Auto-generated method stub return 0; } }
程序运行后,点击平均分后会出现错误,没有计算的结果显示,其中一个错误是
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at 裁判评分.caipanJFrame.actionPerformed(caipanJFrame.java:91)
JTextField t[]=new JTextField[n];
t放到外面做为全局变量,new JTextField[n];放到button2的点击事件里。
能不能详细一点啊,是不是将int n;
n=Integer.parseInt(t1.getText());
JTextField t[]=new JTextField[n];放到JButton button2=new JButton("添加");后面?
然后”new JTextField[n];放到button2的点击事件里“是什么意思啊?new JTextField[n];不能单独用的啊
麻烦啦帮忙解决啊
@左手、右手:
你这t是局部变量啊,每次点击平均又初始化了一遍。。。
把t作为全局变量,初始化t的代码放在第一个if里面。