JAVA中的控件数组——练习使用对象数组

  JAVA实验课老师要我们练习使用对象数组。本人自然是要以GUI界面表示。尝试后发现JAVA中动态添加控件的方法貌似和.NET一样,先用new关键字声明一个控件对象,之后声明对该对象的引用。
  于是,本程序自然成为了弱智程序,输入人数后自动生成相应的文本框让用户输入,完全没有技术含量(最终还是试验成功了Listener类)。无论如何,这又算学习JAVA过程中的一个纪念程序吧。(至少比上次那个矩阵相乘的界面要高级一些)JAVA牛人请无视这个程序吧……
  有以下几点需要说明:
  (1)主窗体JFrame中的GridLayout的行数设置为0,目的是要系统根据控件数目自动设置行数。(本来我手动设置为Count+2,不过系统把列数自动修改为4,界面全乱了。原因尚不明确,郁闷中……)
  (2)由于在main方法中有一个嵌套类用以接收按钮单击的事件,而这个类又要对main方法中的一些变量进行调用,所以这些变量(就是一些对象的引用变量)以final关键字修饰。
  (3)本程序未加入错误处理,输入错误时程序会出错。

   程序运行界面如下图:

代码如下:

/*
作者: 计算机科学与技术084 谢XX
编写日期:2010-5-11
备注:
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LieoGradeCalculator extends JFrame {
    private static final long serialVersionUID = 1L;
    private static int Count = 0;

    public LieoGradeCalculator(String title, int Width, int Height) {
        this.setTitle(title);
        this.setSize(Width, Height);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setLayout(new GridLayout(0, 5, 1, 1));

        this.setVisible(true);
    }

    public static void main(String[] args) {
        int i;

        while (Count > 10 || Count < 1)
            Count = Integer.parseInt(JOptionPane.showInputDialog("请输入学生人数:"));

        final JTextField txtMath[] = new JTextField[Count];
        final JTextField txtJava[] = new JTextField[Count];
        final JTextField txtEnglish[] = new JTextField[Count];
        final JTextField txtAverage[] = new JTextField[Count];

        LieoGradeCalculator MainFrame = new LieoGradeCalculator("Lieo成绩计算器", 400, 40 * (Count + 2));

        MainFrame.add(new JLabel("学号"));
        MainFrame.add(new JLabel("数学成绩"));
        MainFrame.add(new JLabel("Java成绩"));
        MainFrame.add(new JLabel("英语成绩"));
        MainFrame.add(new JLabel("平均成绩"));

        for (i = 0; i < Count; i++) {
            MainFrame.add(new JLabel("ID:" + (i + 1)));

            txtMath[i] = new JTextField();
            txtJava[i] = new JTextField();
            txtEnglish[i] = new JTextField();
            txtAverage[i] = new JTextField();

            txtAverage[i].setEditable(false);
            MainFrame.add(txtMath[i]);
            MainFrame.add(txtJava[i]);
            MainFrame.add(txtEnglish[i]);
            MainFrame.add(txtAverage[i]);
        }

        MainFrame.add(new JLabel("各科平均"));

        final JTextField txtMathAverage = new JTextField();
        final JTextField txtJavaAverage = new JTextField();
        final JTextField txtEnglishAverage = new JTextField();
        txtMathAverage.setEditable(false);
        txtJavaAverage.setEditable(false);
        txtEnglishAverage.setEditable(false);
        MainFrame.add(txtMathAverage);
        MainFrame.add(txtJavaAverage);
        MainFrame.add(txtEnglishAverage);

        JButton btCalc = new JButton("计算");
        MainFrame.add(btCalc);

        btCalc.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int s1, s2, s3;
                int i;
                StudentInfo stuInfo[] = new StudentInfo[Count];

                for (i = 0; i < Count; i++) {
                    stuInfo[i] = new StudentInfo();
                    stuInfo[i].setMath(Integer.parseInt(txtMath[i].getText()));
                    stuInfo[i].setJava(Integer.parseInt(txtJava[i].getText()));
                    stuInfo[i].setEnglish(Integer.parseInt(txtEnglish[i].getText()));

                    txtAverage[i].setText(String.valueOf(stuInfo[i].getAverage()));
                }

                s1 = 0;
                s2 = 0;
                s3 = 0;
                for (i = 0; i < Count; i++) {
                    s1 += stuInfo[i].getMath();
                    s2 += stuInfo[i].getJava();
                    s3 += stuInfo[i].getEnglish();
                }

                txtMathAverage.setText(String.valueOf((int) (s1 * 100 / Count) / 100.00));
                txtJavaAverage.setText(String.valueOf((int) (s2 * 100 / Count) / 100.00));
                txtEnglishAverage.setText(String.valueOf((int) (s3 * 100 / Count) / 100.00));
            }
        });

    }
}

class StudentInfo {

    private int Math, Java, English;

    public int getMath() {
        return this.Math;
    }

    public int getJava() {
        return this.Java;
    }

    public int getEnglish() {
        return this.English;
    }

    public void setMath(int score) {
        this.Math = score;
    }

    public void setJava(int score) {
        this.Java = score;
    }

    public void setEnglish(int score) {
        this.English = score;
    }

    public double getAverage() {
        return ((int) ((this.Math + this.Java + this.English) * 100 / 3.0)) / 100.0;
    }
}
✏️ 有任何想法?欢迎发邮件告诉老夫:daozhihun@outlook.com